关于hapypack的认识

523 阅读2分钟
```
1.happypack是什么?
在webpack构建过程中,我们需要使用Loader对js,css,图片,字体等文件做转换操
作,并且转换的文件数据量也是非常大的,且这些转换操作不能并发处理文件,而是
需要一个个文件进行处理,HappyPack的基本原理是将这部分任务分解到多个子进程
中去并行处理,子进程处理完成后把结果发送到主进程中,从而减少总的构建时间。

2.怎么用?
注意在rule里面的loader的使用方法是做了改变的
loader中不再使用loader和options属性,只需要test和use属性,use的时候
需要注册loader的id
1. 在Loader配置中,对所有的文件的处理都交给了happypack/loader(除了styl中
使用postcss外,对这个处理貌似会报错),happypack/loader?id=xx
紧跟的id=xxx,就是告诉happy-loader选择哪个happyPack的实列处理文件。
 {
    test: /\.(png|jpg)$/,
    /*
    loader: 'url-loader',
    options: {
      limit: 10000,
      name: '[name].[ext]'
    }
    */
    use: ['happypack/loader?id=image']
  },
2.在plugin插件配置中新增了HappyPack的实列,作用是告诉HappyPack如何处理该文件,如下代码:
module.exports = {
  plugins: [
    new HappyPack({
      // 用唯一的标识符id来代表当前的HappyPack 处理一类特定的文件
      id: 'babel',
      // 如何处理.js文件,用法和Loader配置是一样的
      loaders: ['babel-loader']
    })
  ]
}
HappyPack实列中的id属性会和 happypack/loader?id=xxx 中的xxx对应,HappyPack实列中除了有 id,loaders两个属性外,还有如下几个属性:
threads: 代表开启几个子进程去处理这一类文件,默认是3个,必须是整数。verbose:
是否允许HappyPack输出日志,默认为true。threadPool:代表共享进程池。即多个HappyPack实列都使用同一个共享进程池中的子进程去处理任务。以防止资源占用过多。比如如下代码:











```