Node.js 项目通常有一个体积较大的 node_modules 文件夹,它会带来以下问题:
npm prune --production
删除 dev 依赖,开发的时候又要重新装回来,有点麻烦;为了解决以上问题,可使用 esbuild 打包并压缩代码,esbuild 有 tree shaking 功能,没用到的依赖不会打包进来,打包完还能 minify 一下,最后得到的代码体积将显著降低。
使用 esbuild 压缩函数代码非常简单,就一行:
esbuild ./dist/index.js --bundle --minify --platform=node --target=node14.18 --outfile=index.js
./dist/index.js
:入口文件--bundle
:告诉 esbuild 要会把所有代码打包成一个文件;--minify
:告诉 esbuild 要对代码 minify 一下,进一步压缩代码体积;--platform=node
:告诉 esbuild 最后生成的代码将运行在 Node.js,esbuild 默认针对浏览器打包;--target=node14.18
:告诉 esbuild 要把代码编译成兼容 node14.18 的语法,而不是 node 16、18 这些高版本或 node 10、12 这些低版本的语法;--outfile=index.js
:告诉 esbuild 把打包好的文件命名为 index.js;上面这条命令也适用于 typescript,当然入口文件要改一下后缀。但 esbuild 只是编译、打包、压缩代码,并不支持 type checking,所以建议先执行 tsc -noEmit
。除了不支持 type checking,esbuild 打包 ts 代码还有若干其他限制,所以另一种做法是用 tsc
先编译出 js 代码,然后用 esbuild 对 js 进行打包,缺点是 tsc
速度较慢,最后得到的代码体积也大一点点。
使用 esbuild 打包后,代码体积可能会缩小 100 倍以上,函数冷启动时间也可能提高 1 ~ 2 倍。
参考文章: