<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>esbuild on 编程那些事儿</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/</link><description>Recent content in esbuild on 编程那些事儿</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sat, 28 Mar 2026 12:23:33 +0800</lastBuildDate><atom:link href="https://before80.github.io/prgms/Js/tools/build/esbuild/index.xml" rel="self" type="application/rss+xml"/><item><title>第1章 esbuild是什么</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-01-what-is-esbuild/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-01-what-is-esbuild/</guid><description>&lt;h1 id="chapter-01---esbuild-是什么"&gt;Chapter 01 - esbuild 是什么&lt;/h1&gt;
&lt;h2 id="11-定义一句话认识-esbuild"&gt;1.1 定义：一句话认识 esbuild&lt;/h2&gt;
&lt;p&gt;想象一下这个场景：你手搓了一个炫酷的网页，代码模块写得优雅又整洁，结果浏览器打开一看——满屏报错，理由是它&amp;quot;不认识&amp;quot;你的 &lt;code&gt;import&lt;/code&gt; 和 &lt;code&gt;export&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>第2章 历史与演进</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-02-history-and-evolution/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-02-history-and-evolution/</guid><description>&lt;h2 id="21-诞生背景传统构建工具的速度瓶颈"&gt;2.1 诞生背景：传统构建工具的速度瓶颈&lt;/h2&gt;
&lt;p&gt;话说前端圈子的构建工具发展史，就是一部&amp;quot;蜗牛进化史&amp;quot;。&lt;/p&gt;
&lt;p&gt;2010 年代初期，前端项目还很单纯——写几个 HTML、几个 CSS、几个 JS 文件，用手直接在 &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; 标签里写代码，搞定了。那时候的&amp;quot;构建工具&amp;quot;基本等于一个 FTP 上传工具，把文件拖进服务器就完事了。&lt;/p&gt;</description></item><item><title>第3章 esbuild能做什么</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-03-what-can-esbuild-do/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-03-what-can-esbuild-do/</guid><description>&lt;h2 id="31-打包bundling"&gt;3.1 打包（Bundling）&lt;/h2&gt;
&lt;h3 id="311-多模块合并为单文件"&gt;3.1.1 多模块合并为单文件&lt;/h3&gt;
&lt;p&gt;想象一下你写了一个网页，有 50 个 &lt;code&gt;.js&lt;/code&gt; 文件，每个文件负责不同的功能——有的是处理表单验证的，有的是负责动画效果的，有的是处理网络请求的。&lt;/p&gt;</description></item><item><title>第4章 esbuild用在哪里</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-04-where-is-esbuild-used/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-04-where-is-esbuild-used/</guid><description>&lt;h2 id="41-前端项目构建"&gt;4.1 前端项目构建&lt;/h2&gt;
&lt;h3 id="411-单页面应用spa"&gt;4.1.1 单页面应用（SPA）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;单页面应用&lt;/strong&gt;（Single Page Application，简称 SPA）是这些年最流行的前端架构之一。&lt;/p&gt;
&lt;p&gt;它的特点是：整个应用只有一个 HTML 页面，后续的页面切换不需要从服务器加载新页面，而是通过 JavaScript 动态渲染不同的&amp;quot;视图&amp;quot;（View）。用户感觉页面在切换，实际上整个页面从来没刷新过——这就像看电视剧不换台，而是让演员在同一个舞台上换布景。&lt;/p&gt;</description></item><item><title>第5章 如何使用esbuild</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-05-how-to-use-esbuild/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-05-how-to-use-esbuild/</guid><description>&lt;h2 id="51-环境安装"&gt;5.1 环境安装&lt;/h2&gt;
&lt;h3 id="511-nodejs-环境要求版本支持说明"&gt;5.1.1 Node.js 环境要求（版本支持说明）&lt;/h3&gt;
&lt;p&gt;在安装 esbuild 之前，你需要确保系统里已经安装了 &lt;strong&gt;Node.js&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Node.js 是一个 JavaScript 运行时，简单理解就是：它让你能在服务器端、桌面端、命令行里运行 JavaScript 代码。esbuild 的 JavaScript 版本需要 Node.js 才能运行（也有不需要 Node.js 的原生二进制版本，后面会讲）。&lt;/p&gt;</description></item><item><title>第6章 注意事项与陷阱</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-06-caveats-and-pitfalls/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-06-caveats-and-pitfalls/</guid><description>&lt;h2 id="61-已知局限性"&gt;6.1 已知局限性&lt;/h2&gt;
&lt;p&gt;esbuild 很快，但这不意味着它什么都能干。在决定用 esbuild 之前，你需要了解它的局限性。&lt;/p&gt;
&lt;h3 id="611-无内置-hmr热模块替换依赖上层工具实现"&gt;6.1.1 无内置 HMR（热模块替换），依赖上层工具实现&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;HMR&lt;/strong&gt;（Hot Module Replacement，热模块替换）是前端开发中的&amp;quot;神器&amp;quot;——当你的代码发生变化时，不需要刷新整个页面，就能把变化的部分替换进去，页面的其他状态（比如输入框里的内容、滚动位置、API 请求的状态）都能保持不变。&lt;/p&gt;</description></item><item><title>第7章 配置参考</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-07-configuration-reference/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-07-configuration-reference/</guid><description>&lt;h2 id="71-入口与出口配置"&gt;7.1 入口与出口配置&lt;/h2&gt;
&lt;h3 id="711-entrypoints入口文件--多个入口"&gt;7.1.1 entryPoints（入口文件 / 多个入口）&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;entryPoints&lt;/code&gt; 是 esbuild 构建的起点，可以是单个文件，也可以是多个文件：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 单个入口
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;await&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;esbuild&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;build&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;entryPoints&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;src/index.js&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;outfile&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;dist/index.js&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 多个入口 —— 每个入口会生成对应的输出文件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;await&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;esbuild&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;.&lt;/span&gt;&lt;span style="color:#aa89ea"&gt;build&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;entryPoints&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;[&lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#39;src/home.js&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;src/about.js&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;src/contact.js&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#aa89ea"&gt;outdir&lt;/span&gt;&lt;span style="color:#54b1c7"&gt;:&lt;/span&gt; &lt;span style="color:#98c379"&gt;&amp;#39;dist&amp;#39;&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;// 生成：dist/home.js、dist/about.js、dist/contact.js
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="712-stdin从标准输入读取代码适用于特殊构建场景"&gt;7.1.2 stdin（从标准输入读取代码，适用于特殊构建场景）&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;stdin&lt;/code&gt; 配置让你不需要文件，直接从命令行或管道输入代码：&lt;/p&gt;</description></item><item><title>第8章 附录</title><link>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-08-appendix/</link><pubDate>Sat, 28 Mar 2026 11:54:00 +0800</pubDate><guid>https://before80.github.io/prgms/Js/tools/build/esbuild/Chapter-08-appendix/</guid><description>&lt;h2 id="81-官方资源链接github--文档--changelog"&gt;8.1 官方资源链接（GitHub / 文档 / changelog）&lt;/h2&gt;
&lt;p&gt;学习任何工具，官方文档永远是最权威的资料。以下是 esbuild 的官方资源：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;资源&lt;/th&gt;
 &lt;th&gt;链接&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;GitHub 仓库&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/evanw/esbuild"&gt;github.com/evanw/esbuild&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;官方文档&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://esbuild.github.io"&gt;esbuild.github.io&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;官方博客&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://esbuild.github.io/news"&gt;esbuild.github.io/news&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Changelog&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://github.com/evanw/esbuild/releases"&gt;github.com/evanw/esbuild/releases&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;npm 页面&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://www.npmjs.com/package/esbuild"&gt;www.npmjs.com/package/esbuild&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="github-仓库"&gt;GitHub 仓库&lt;/h3&gt;
&lt;p&gt;esbuild 的 GitHub 仓库（github.com/evanw/esbuild）是获取信息的第一站。&lt;/p&gt;</description></item></channel></rss>