webpack優(yōu)化,大大提高你的構(gòu)建速度!

webpack優(yōu)化

0、調(diào)試

webpack --config file --colors --profile --display-modules

  • --colors 輸出結(jié)果帶彩色,比如:會(huì)用紅色顯示耗時(shí)較長(zhǎng)的步驟

  • --profile 輸出性能數(shù)據(jù),可以看到每一步的耗時(shí)

  • --display-modules 默認(rèn)情況下 node_modules 下的模塊會(huì)被隱藏,加上這個(gè)參數(shù)可以顯示這些被隱藏的模塊

1、添加 alise

主要是 node_modules 部分。 可以加快查詢速度。 (感覺(jué)無(wú)所謂)

2、避免比不要的babel

對(duì)于很多的 npm 包來(lái)說(shuō),他們完全沒(méi)有經(jīng)過(guò) babel 的必要(成熟的 npm 包會(huì)在發(fā)布前將自己 es5,甚至 es3 化),讓這些包通過(guò) babel 會(huì)帶來(lái)巨大的性能負(fù)擔(dān),畢竟 babel6 要經(jīng)過(guò)幾十個(gè)插件的處理,雖然 babel-loader 強(qiáng)大,但能者多勞的這種保守的想法卻使得 babel-loader 成為了整個(gè)構(gòu)建的性能瓶頸。所以我們可以使用 exclude,大膽地屏蔽掉 npm 里的包,從而使整包的構(gòu)建效率飛速提高。

loaders: [{
    test: /\.js[x]?$/,
    exclude: /(node_modules)|(global\/lib\/)/,
    loader: 'babel-loader'
},

3、 DllReferencePlugin

對(duì)于jquery,react這種第三方庫(kù)重復(fù)編譯會(huì)造成時(shí)間上的浪費(fèi)。

所以我們把這些文件打包成 lib.js 文件 插件命名參考c++。 dll代表用來(lái)被引用的文件。

1、 創(chuàng)建一個(gè) webpack.dll.conf.js

var vendors = [
'jquery',
'underscore',
'react',
'react-dom',
];

module.exports = {
    output: {
        path: path.resolve(process.cwd(),'build/lib/'),
        filename: '[name].js',
        library: '[name]',
    },
    entry: {
        "lib": vendors,
    },
    resolve: {
        alias: ...
    },
    plugins: [
        new webpack.DllPlugin({
            path: path.resolve(process.cwd(),'build/lib/manifest.json'),
            name: '[name]',
            context: __dirname,
        }),
    ],
};

我們把vendors中的文件打包為一個(gè) lib.js

加入了 webpack.DllPlugin 插件

output 中增加了 library

運(yùn)行后會(huì)在lib目錄 生成一個(gè) lib.js 和 manifest.json
lib.js 是編譯后的文件
manifest.json是用來(lái)告訴項(xiàng)目的 webpack 相關(guān)模塊對(duì)應(yīng)lib.js。

在webpack.conf.js中增加

     new webpack.DllReferencePlugin({
            context: __dirname,
            manifest: require('./lib/manifest.json')
        }),

完成后先編譯一次dll 再 執(zhí)行 項(xiàng)目編譯。dll文件編譯一次后除非變更否則不需要再編譯。
頁(yè)面中

<script src="./lib.js"></script> //先引入lib.js 或者 把兩者合并
<script src="./common.js"></script>

對(duì)項(xiàng)目中的 common.js dll前后 做了一次對(duì)比

dll前 186秒
dll后 92秒

4、HappyPack

https://github.com/amireh/happypack

總結(jié)

dll 和 HappyPack的方案對(duì)速度有明顯的提高。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 無(wú)意中看到zhangwnag大佬分享的webpack教程感覺(jué)受益匪淺,特此分享以備自己日后查看,也希望更多的人看到...
    小小字符閱讀 8,227評(píng)論 7 35
  • 最近在學(xué)習(xí) Webpack,網(wǎng)上大多數(shù)入門(mén)教程都是基于 Webpack 1.x 版本的,我學(xué)習(xí) Webpack 的...
    My_Oh_My閱讀 8,205評(píng)論 40 247
  • 寫(xiě)在開(kāi)頭 先說(shuō)說(shuō)為什么要寫(xiě)這篇文章, 最初的原因是組里的小朋友們看了webpack文檔后, 表情都是這樣的: (摘...
    Lefter閱讀 5,324評(píng)論 4 31
  • 早上上班的路上,一直在回想這兩天的情緒,復(fù)盤(pán)整個(gè)過(guò)程。 前晚鑫鑫因?yàn)?0點(diǎn)多還在和同學(xué)討論動(dòng)漫,被我批評(píng)。我很火大...
    青茶_2619閱讀 170評(píng)論 0 0
  • 不久前看《這咬人的愛(ài)》,看到后半段,江紹宜和孫晉州幾乎鬧掰,正替他們焦急之際,孫晉州出現(xiàn)了。江紹宜問(wèn)他怎么來(lái)了,他...
    春風(fēng)巷72號(hào)閱讀 1,077評(píng)論 1 3