#打包

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,离谱,这是我没想到的,这就是为什么这么大,本以为是小型打包工具