Webpack 多线程压缩为啥没生效?
我用 Webpack 的 TerserPlugin 开启了多线程压缩,但构建时间一点没变快,是不是哪里配错了?
我试过把 parallel 设成 true 甚至设成 4,但 CPU 占用还是只有一核在跑。项目是 React 的,打包体积挺大的,按理说应该能看出来加速效果才对。
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
optimization: {
minimizer: [
new TerserPlugin({
parallel: true,
// 或者写成 parallel: 4
}),
],
},
};
另外,webpack 自身的并行能力也需要配置一下。你可以在 webpack 配置中增加 parallelism 参数来控制并行处理的模块数量。还有就是看看你的 loader 是否也开启了并行处理,比如 babel-loader 也可以设置 parallel 参数。
这里有一个优化后的配置示例供你参考:
这样配置后,理论上可以更好地利用多核 CPU 来加速构建过程。如果问题依旧存在,可能还需要进一步检查是否有其他瓶颈,比如磁盘 I/O 或者其他的插件配置。
第一个可能:TerserPlugin 版本太老。现在 Webpack 5 已经内置了 TerserPlugin,但如果你手动安装了旧版本,可能 worker 功能不完整。先确认一下版本号,至少要 4.x 以上。
第二个可能:terser 包本身版本低。TerserPlugin 只是调度,真正的压缩是 terser 包在干。确保 terser 也更新到最新:
第三个可能容易被忽略:你的项目文件数量。如果代码量不够大,Webpack 会认为不值得启动 worker 线程,反而用单线程。你可以试试强制指定线程数,同时把每個 chunk 的最小体积调大一点:
还有个常见坑:如果你用了 cache 选项(Webpack 5 的持久化缓存),第一次构建确实会慢一些,但第二次构建因为有缓存会快很多,这时候你看时间对比可能不准。可以用 webpack --no-cache 强制清掉缓存再测。
最后提醒一下,Windows 平台下多线程有时会抽风,如果你是 Windows 系统,可以试试把 parallel 改成 2 或者直接用单线程对比一下,看看是不是平台问题。
你可以先跑一下 npm list terser-webpack-plugin terser 看看版本,然后升级到最新试试。