打包工具:编译器ESBuild

  • 作者:Evan Wallace(GitHub:evanw)
  • 公司背景:他是 Figma 的联合创始人 & 前 CTO,esbuild 是个人开源项目,不属于 Figma 公司,只是作者在 Figma 任职期间开发出来的。
  • 实现语言Go 语言,2020 年正式发布
  • 定位: 主打编译器(同时内置三合一:编译器 + 打包器 + 压缩器)
  • 优点:
    • 内置三合一,同时拥有编译打包压缩
  • 缺点
    • 生态弱
    • 语法降级能力有限(不做 polyfill
    • dev环境简陋,没有成熟的热更新
  • 主要使用场景:
    • vite2-6版本的开发阶段的 依赖预构建,vite8用其他的替换esbuild了;
    • webpack里可以用esbuild-loader插件替代babel-loader插件
    • 打包轻量的SDK、Node脚本、小工具库、单独做代码压缩等

一句话记住:

主要是【编译器】,编译很快,顺便有打包的;

编译快的原因是Go写的,cpu并行处理;

业务一般不直接使用,是打包器Vite的底层引擎;

1. 什么是 ESBuild

ESBuild 是用 Go 语言写的 JavaScript/TypeScript 编译、打包工具。

核心卖点:速度极快,比 Webpack 快几十上百倍。

Go 是编译型语言,CPU 多核并行处理;
而 webpack 是 JS,单线程,性能瓶颈大。

⚠️ 注意:ESBuild 更多是底层引擎,不是完整工程化工具

Vite、Rspack、Taro 内部都在大量使用 esbuild,但一般业务项目不会直接裸用 esbuild 做完整项目。

2. ESBuild 能做什么

定位:高速编译器,不是完整脚手架

  1. 转译语法:TS → JS、ES6+ 语法降级到 ES5、JSX 编译
  2. 打包 bundle:把多个文件合并成一个文件
  3. 压缩 minify:代码压缩混淆
  4. 处理 css:css 打包、压缩
  5. 提供 API:命令行 + JS API,供别的工具调用

不能 / 不擅长的

  • 没有强大的插件生态(对比 webpack)
  • 不做复杂的热更新、devServer(有简单的 serve,但很简陋)
  • 不支持完整的 HMR
  • 不适合直接做大型 SPA 完整工程

⚠️重点:esbuild 只转语法,不会自动引入 core‑js 做 API 兼容 。例如 PromiseArray.prototype.includes 这些新 API,esbuild 不会帮你补,需要自己处理。

3. 使用

js 复制代码
npm install esbuild -D
js 复制代码
//# 把 src/index.ts 打包输出到 dist/bundle.js
esbuild src/index.ts --bundle --outfile=dist/bundle.js

//# 打包+压缩+es5
esbuild src/index.ts --bundle --minify --target=es5 --outfile=dist/bundle.js
  • buildAPI:完整打包,处理依赖、文件系统,输出文件(打包用)
  • transformAPI:只做字符串转译,不读取磁盘,只处理一段代码(Vite 开发模式大量用这个)
js 复制代码
// 运行:`node build.js`
const esbuild = require('esbuild')

esbuild.build({
  entryPoints: ['./src/index.ts'], //入口
  bundle: true,
  minify: true,
  target: 'es5',
  outfile: './dist/bundle.js'
}).catch(()=>process.exit(1))
js 复制代码
// transform例子,只编译一段ts代码,不读文件
const result = await esbuild.transform(`let a:number = 1`, {loader:'ts'})
console.log(result.code)
相关推荐
用户921080262861 小时前
Bubble 的 loading 和 typing:AI 回复生成中的交互处理
前端
SamChan901 小时前
用Playwright端到端测试PDF翻译功能:Web自动化测试实战
前端·python·ai·pdf·wpf
平生不晚1 小时前
在 SVG 体系里画一条任意的线
前端·算法
Escalating_xu1 小时前
【Linux】进程信号:从产生、阻塞与递达到 sigaction、可重入与内核返回路径
linux·运维·面试·职场和发展
用户059540174461 小时前
把大模型记忆召回测试从 30 分钟手工核对压到 3 秒自动化,pytest + FAISS 这套组合救了我
前端·css
醉里博客1 小时前
醉里起始页 Snavigation2.0:纯前端导航页的二开改造与性能优化实践
前端
雪芽蓝域zzs2 小时前
新建前端pnpm(vue js ) 仿若依项目(一)
前端·javascript·vue.js
vipbic2 小时前
网站升级了,我却有点舍不得
前端·vue.js·后端