92 - 《Bigfish 4 特性 04:build 阶段的构建提速》
发布于 2022年4月6日
4 月会更新 20 篇 Bigfish 4(含 Umi 4)的新特性,这是第四篇。
构建提速不只是 dev 阶段的 MFSU,还要考虑流程上 build 阶段的构建。build 阶段的构建相比 dev 阶段,会做很多额外的事,比如 js 压缩和 css 压缩、tree-shaking、code-splitting,同时对于依赖编译和缓存的利用方式也会不同。所以优化手段也会大不同。
esbuild
虽然构建提速没有银弹,但 esbuild 是这个时期的大杀器。
JS 压缩之前默认是 terser,Bigfish 4 之后默认是 esbuild。原因在《彻底告别编译 OOM,用 esbuild 做压缩器》有过介绍,除了快,还可彻底解压缩导致的 OOM 问题,缺点是相比 terser 尺寸会增加 10%。同时压缩方式还支持 terser、uglifyJs、swc,支持不同场景,比如针对不支持 es6 的场景,选 uglifyJs 可以在遇到高级语法时主动抛错。
export default {
jsMinifier: 'uglifyJs',
jsMinifierOptions: {},
}
CSS 压缩之前默认是 cssnano,Bigfish 4 之后默认也是 esbuild。相比 cssnano,用 esbuild 压缩 CSS 速度提升 6 倍,而尺寸仅增加约 1%。同时也可通过配置切换回 cssnano,以及尝试我们试验性支持的 parcelCSS。
export default {
cssMinifier: 'parcelCSS',
cssMinifierOptio