编译优化-HappyPack
2020-06-12 本文已影响0人
栗子daisy
多线程(多进程模拟)支持
HappyPack的工作原理:在Webpack和Loader之间多加了一层,改成了Webpack并不是直接去和某个Loader进行工作,而是Webpack test到了需要编译的某个类型的资源模块后,将该资源的处理任务交给了HappyPack,由HappyPack在内部线程池中进行任务调度,分配一个线程调用处理该类型资源的Loader来处理这个资源,完成后上报处理结果,最后HappyPack把处理结果返回给Webpack,最后由Webpack输出到目的路径。通过这一系列操作,将原本都在一个Node.js线程内的工作,分配到了不同的线程(进程)中并行处理。
使用方法如下:
首先引入HappyPack并创建线程池:
const HappyPack = require('happypack');
const happyThreadPool = HappyPack.ThreadPool({size: require('os').cpus().length - 1});
替换之前的Loader为HappyPack的插件:
{
test: /\.(js|mjs|jsx|ts|tsx)$/,
include: paths.appSrc,
use: ['happypack/loader?id=babel-application-js'],
},
将原Loader中的配置,移动到对应插件中:
new HappyPack({
id: 'babel-application-js',
threadPool: happyThreadPool,
verbose: true,
loaders: [
{
loader: require.resolve('babel-loader'),
options: {
...省略
},
},
],
}),