webpack之tree shaking優(yōu)化打包體積

前言

大家都知道webpack可以使用tree shaking優(yōu)化webpack打包,但是使用時(shí)還是有幾個(gè)點(diǎn)要注意一下,昨晚上就因?yàn)槭褂胋abel-loader時(shí)候?qū)S6模塊轉(zhuǎn)譯成CommonJS類型,導(dǎo)致tree shaking失效奴潘。

為什么使用Tree Shaking律想?

原因是webpack正常打包時(shí)候會(huì)將代碼一股腦的全部打包到一起蚀腿,這樣就使得我們最終打包生成的文件多了許多垃圾纷妆,使用Tree Shaking能將那些沒有import的方法干掉亦镶,從而減小打包體積。

使用Tree Shaking

1灼狰、配置webpack.config.js
optimization: {
        usedExports: true
}
2宛瞄、配置package.json
"sideEffects": false
3、如果有使用babel-loader切記要將presets中modules設(shè)置為false,否則會(huì)轉(zhuǎn)義CommonJS類型份汗,導(dǎo)致tree shaking失效
{
    test: /\.js$/,
    exclude: /(node_modules|bower_components)/,
    use: {
        loader: 'babel-loader',
        options: {
        presets: [['@babel/preset-env',{
            "targets": {
                "edge": "17",
                "firefox": "60",
                "chrome": "67",
                "safari": "11.1",
            },
            'useBuiltIns':'usage',
            "modules": false 
        }]],
        
        }
    }
}
4盈电、生效的main.js
/*! exports provided: square, cube, default */
/*! exports used: cube */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("/* unused harmony export square */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return cube; });\nfunction square(x) {\n  console.log('square');\n  return x * x;\n}\nfunction cube(x) {\n  console.log('cube');\n  return x * x * x;\n}\n/* unused harmony default export */ var _unused_webpack_default_export = ({\n  square,\n  cube\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvbWF0aC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3NyYy9tYXRoLmpzP2M0MGYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHNxdWFyZSh4KSB7XG4gIGNvbnNvbGUubG9nKCdzcXVhcmUnKTtcbiAgcmV0dXJuIHggKiB4O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGN1YmUoeCkge1xuICBjb25zb2xlLmxvZygnY3ViZScpO1xuICByZXR1cm4geCAqIHggKiB4O1xufVxuZXhwb3J0IGRlZmF1bHQge1xuICBzcXVhcmUsXG4gIGN1YmVcbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/math.js\n");
/***/ })
5、修改mode為production并打包
 mode:'production'

注意點(diǎn)

1杯活、tree shaking只支持ES6模塊的導(dǎo)入導(dǎo)出匆帚,因此使用babel-labal時(shí)候需要將modules設(shè)置為false,否則不生效
2旁钧、配置package.json的sideEffects吸重,當(dāng)業(yè)務(wù)邏輯單純引用例如css文件時(shí)候,需要將其過濾掉歪今,否則使用tree shaking將不會(huì)被打包嚎幸,例如:

"sideEffects": [ "*.css"]

沒有靜態(tài)資源的話直接設(shè)置為false即可,
3寄猩、當(dāng)model為production時(shí)候嫉晶,默認(rèn)會(huì)配置optimization.usedExports為true,同事會(huì)自動(dòng)壓縮田篇,當(dāng)model為development時(shí)候需要手動(dòng)設(shè)置為true替废。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市泊柬,隨后出現(xiàn)的幾起案子椎镣,更是在濱河造成了極大的恐慌,老刑警劉巖彬呻,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衣陶,死亡現(xiàn)場離奇詭異,居然都是意外死亡闸氮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門教沾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒲跨,“玉大人,你說我怎么就攤上這事授翻』虮” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵堪唐,是天一觀的道長巡语。 經(jīng)常有香客問我,道長淮菠,這世上最難降的妖魔是什么男公? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮合陵,結(jié)果婚禮上枢赔,老公的妹妹穿的比我還像新娘澄阳。我一直安慰自己,他們只是感情好踏拜,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布碎赢。 她就那樣靜靜地躺著,像睡著了一般速梗。 火紅的嫁衣襯著肌膚如雪肮塞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天姻锁,我揣著相機(jī)與錄音峦嗤,去河邊找鬼。 笑死屋摔,一個(gè)胖子當(dāng)著我的面吹牛烁设,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钓试,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼装黑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了弓熏?” 一聲冷哼從身側(cè)響起恋谭,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挽鞠,沒想到半個(gè)月后疚颊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡信认,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年材义,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫁赏。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡其掂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出潦蝇,到底是詐尸還是另有隱情款熬,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布攘乒,位于F島的核電站贤牛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏则酝。R本人自食惡果不足惜殉簸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧喂链,春花似錦返十、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蝇率,卻和暖如春迟杂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背本慕。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工排拷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锅尘。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓监氢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親藤违。 傳聞我的和親對象是個(gè)殘疾皇子浪腐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361