Webpack 多线程压缩为啥没生效?
我用 Webpack 的 TerserPlugin 开启了多线程压缩,但构建时间一点没变快,是不是哪里配错了?
我试过把 parallel 设成 true 甚至设成 4,但 CPU 占用还是只有一核在跑。项目是 React 的,打包体积挺大的,按理说应该能看出来加速效果才对。
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
optimization: {
minimizer: [
new TerserPlugin({
parallel: true,
// 或者写成 parallel: 4
}),
],
},
};
第一个可能: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 看看版本,然后升级到最新试试。