```
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實列都使用同一個共享程式池中的子程式去處理任務。以防止資源佔用過多。比如如下程式碼:
```複製程式碼