happypack能夠加快rebuild的速度javascript
{ test: /\.(js|jsx)$/, exclude: /(node_modules|vendor)/, loader: isDev ? 'happypack/loader' : 'babel-loader' }
new HappyPack({ loaders: [{ path: 'babel-loader', query: getBabelrc({isDev}) }], threads: 4 })
一樣用來加快rebuild速度。它的原理和webpack提供的dll加速方案同樣,將經常使用的不變的模塊編譯成一個文件,之後rebuild的時候再也不編譯,統統指向那個預編譯好的文件。那是一套極其繁瑣的方案,這個插件幫你簡化了配置。css
new AutoDllPlugin({ inject: true, // will inject the DLL bundles to index.html filename: '[name].[hash].js', entry: { vendor: ['react', 'react-dom'] } })
that's all.html
用來將你項目中的全部css提出來變成一個文件。在生產環境中能夠減小請求,可是不要在開發環境中使用,這會減慢你的編譯速度。java
這個配置有點繁瑣,你們以前去github上看吧node
通常咱們使用的node_modules裏的文件是不會變,因此咱們常常會這麼作,把全部來自node_modules的文件編譯成一個vendor.js,而後再加載咱們的main.js。那咱們怎麼去讓瀏覽器緩存咱們的vendor.js呢,要作幾件事react
[name].[hash].js
改爲[name].[chunkhash].js
,這是爲了給每一個文件各自不一樣的hash,否則每次build,全部的文件hash會同樣。咱們每次build的時候,hash都會變,這是由於webpack運行的時候須要一段runtime的代碼,這段代碼一直在變,致使每次build都會產生不一樣的hash,而[name].[hash].js
會將該hash用於全部的文件。webpack
runtime.js
vendor.js
main.js
,依次插入html中,而且這個vendor.js本身的hash是不會隨着build而改變的。這個時候,咱們就可使用manifest文件來緩存了。webpack官網有教程,你們以前去上面看吧git
webpack爲了減少文件大小,會對模塊重命名。在你運行build完的js,有什麼錯誤信息打印出來的時候,你徹底看不懂這是個什麼模塊,這個時候你就須要這個插件,可是也不要在生產環境中用,會增長你的文件大小。github
new webpack.NamedModulesPlugin()
that's all.web
對與我這種強迫症,我但願我build出來的東西都是正確歸類,整齊擺放的,因此我但願個人js通通在js文件夾,css通通在css文件夾
new ExtractTextPlugin({ filename: getPath => getPath('css/[name].[contenthash].css').replace('css/js', 'css'), allChunks: true })
原本filename填css/[name].[contenthash].css
應該就足夠了,可是它會把你放在css/js
文件夾下,因此在issue下,找到了這種方法來把css/js
替換成css
js/xx
就行,例如new webpack.optimize.CommonsChunkPlugin({ name: 'js/vendor', minChunks: function(module) { //去掉sass if(module.resource && (/^.*\.(css|scss|sass)$/).test(module.resource)) { return false; } //來自node_modules的文件統一打進vendor return module.context && module.context.indexOf("node_modules") !== -1; } }), new webpack.optimize.CommonsChunkPlugin({ name: "js/runtime", minChunks: Infinity })
new UglifyJSPlugin({ sourceMap: true, compress: { warnings: false, //buid 的時候不要報warnings drop_console: true //no console } })
不只僅是爲了減小代碼量,在生產環境運行時,讓用戶看到你一堆debug信息,實在不雅觀。