178 - 《手撕源码 24:bunchee 2》
发布于 2022年8月30日
bunchee 是 npm 库打包工具,看到他发布 2.0 有提到 swc 和 package exports 就翻来看一遍。没多少代码,10-20 分钟就能看完。作者是 huozhi,vercel 员工,同时也是 devjar 的作者。
bunchee 是 npm 库打包工具里 bundle 系的,输入是一个文件,输出是包含其依赖在内的打包后的产物。对比之下,father 4 是 bundless 系的,或者叫 transform 系,输入是一个文件,输出是这个文件的另一种格式。
这次翻源码从问题出发。
1、bunchee 如何做打包?
基于 rollup + 一堆插件,支持 watch 和 build 模式。
2、bunchee 如何使用 swc?
基于 rollup-plugin-swc3。swc 好是好,就是太大,单独安装下就需要 70M+,为此 umi 4 使用 swc 作为编译器时是需要自行安装 @swc/core 的。相比之下,esbuild 仅 17M+。
3、bunchee 如何支持 package exports?
bunchee 会识别 package exports,支持 multiple exports,也支持 exports sugar(exports: ‘./index.js’)。如果有多个 exports,会把每个 exports 都