打包
web 应用程序一般都需要打包 node_modules 而且需要分包
node 应用程序可以不打包,使用 npm i 下载 deps 来使用,通过 peerdeps 来限制用户版本,还有就是一般用户应该已经装的依赖会使用peerdeps如react,这样不会让用户装两遍
webpack
5m
老牌的成熟打包工具,前端基石,业务项目中不可替代
现在更新变少,应该是要迭代成 turbopack
vite
3.5m
新一代业务打包工具,推进 esm 模块规范
基于 esbuild 与 rollup
esbuild 提供极快的预编译
rollup 提供业务打包
rollup
2m
全面的库打包工具
- 通过插件打包 ts
- 通过插件打包 node_modules
- 通过插件打包 cjs
- 打包产物多 amd,cjs,esm,iife,umd,system
esbuild
130k
极快极小的打包工具
可以打包 ts,仅为打包,不支持类型检查与输出
- 默认就可以打包 node_modules 和 ts
- 打包产物仅有 iife(browser),cjs(node),esm(neutral)
- 分包仅支持 esm,而且还在开发中
- 不转换 ast,代码直接打包成字节码
- 不支持热更新 hot-reload,仅支持 living-reload 自动刷新页面
- 插件需要使用 node sync 操作,因为 go 的异步进程会丢失数据
tsup
500k
基于 esbuild 的类型友好的打包工具
- 默认打包 ts,可以生成类型文件,但是是通过 tsc
- 默认不打包 node_modules
- shims 提供兼容 esm 与 cjs 的全局变量
- 分包仅支持 esm,而且还在开发中
tsc
typescript 自带的类型检查打包工具
- 可以生成类型文件
- 可以单独用来类型检查
- 不可以打包 node_modules
ncc
16m
serverless 经常使用的打包成单文件的打包工具
- 默认打包 node_modules
- 基于 webpack,离谱,这是我没想到的,这就是为什么这么大,本以为是小型打包工具