最近在看《深刻浅出webpack》看到了happypack
。就想起公司一vue项目,每次项目启动都将近2分钟。等的实在让人不耐烦,都够我支付宝偷一波能量了。就本身实践了下,事实证实是有效的。原平均构建速度为1分55秒(5次),使用happypack后平均构建速度为1分45秒(5次)。我只修改了对.vue文件的处理,以下实战代码,节省了10秒仍是不错滴。javascript
因为有大量文件须要解析和处理,构建是文件读写和计算密集型的操做,特别是当文件数量变多后,Webpack 构建慢的问题会显得严重。 运行在 Node.js 之上的 Webpack 是单线程模型的,也就是说 Webpack 须要处理的任务须要一件件挨着作,不能多个事情一块儿作。happypack
把任务分解给多个子进程去并发的执行,子进程处理完后再把结果发送给主进程。css
修改前代码vue
// ... module: { // ... rules: [ { test: /\.vue$/, loader: 'vue-loader', options: vueLoaderConfig }, ] }, plugins: []
修改后代码java
// ... module: { // ... rules: [ { test: /\.vue$/, loader: 'happypack/loader?id=vue', }, ] }, plugins: [ new HappyPack({ id: 'vue', loaders: [{ loader: 'vue-loader', options: vueLoaderConfig }], }), ]
在 Loader 配置中,全部.vue文件的处理都交给了 happypack/loader 去处理,使用紧跟其后的 querystring ?id=vue(这个id随便去只要跟下面实例中的id对应上就好了) 去告诉 happypack/loader 去选择哪一个 HappyPack 实例去处理文件(能够new 多个HappyPack分别去处理多种类型文件,好比你能够再new一个HappyPack去处理css,同上面处理.vue文件同样)。
在 Plugin 配置中,新增了个 HappyPack 实例分别用于告诉 happypack/loader 去如何处理.vue。选项中的 id 属性的值和上面 querystring 中的 ?id=vue相对应,选项中的 loaders 属性和 Loader 配置中同样。webpack
接入 HappyPack 后,你须要给项目安装新的依赖:web
npm i -D happypack
在实例化 HappyPack 插件的时候,除了能够传入 id
和 loaders
两个参数外,HappyPack
还支持以下参数:npm
threads
表明开启几个子进程去处理这一类型的文件,默认是3个,类型必须是整数。verbose
是否容许 HappyPack
输出日志,默认是 true。threadPool
表明共享进程池,即多个 HappyPack 实例都使用同一个共享进程池中的子进程去处理任务,以防止资源占用过多。