由于js的单线程特性,文件和任务时 要等待一个任务执行完成后执行下一个任务,但在实际开发中,很多任务是可以并行执行的(如同时处理多个不同js文件或同事压缩多张图片),一些loader和插件(thread-loader或happypack)提供了额外的并行处理能力
并行前
并行后
webpack.config.js
module.exports = {
entry: './src/index.js',
output: {
filename: 'main.js',
},
// mode: 'production', // 或者 'production'
module: {
rules: [
{
test: /\.js$/i,
exclude: /node_modules/,
use: [
{
loader: 'thread-loader',
options: {
// 工作者数量,默认为 os.cpus().length - 1
// 当设置为`true`时,它会自动匹配主机上的CPU核心数
workers: 4, // 或者 true
// 持久化worker,防止重新生成
// persistent: true,
// 传递给工作线程的loader上下文
// (默认: 传递给主线程的相同上下文)
// pool: {}
// 允许跨进程共享相同的node_modules
// 将极大地提升编译速度
// 默认为`true`
// 注意:启用此选项将禁用`pool.name`和`pool.path`
// pool: {
// type: 'shared',
// },
// 当使用持久化工作线程时,设置超时时间(毫秒)
// 在空闲时杀死工作线程
// 默认为5000(5秒)
// timeout: 2000,
// 传递给工作线程的额外选项
// (默认: 传递给主线程的相同选项)
// options: {},
},
},
{
loader: 'babel-loader', // 需要并行处理的loader
// ... 其他babel-loader配置
},
]
}
]
},
}