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類(lèi)型旧蛾,導(dǎo)致tree shaking失效丁鹉。

為什么使用Tree Shaking?

原因是webpack正常打包時(shí)候會(huì)將代碼一股腦的全部打包到一起隐锭,這樣就使得我們最終打包生成的文件多了許多垃圾渐扮,使用Tree Shaking能將那些沒(méi)有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類(lèi)型玖像,導(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í)候捺僻,需要將其過(guò)濾掉乡洼,否則使用tree shaking將不會(huì)被打包,例如:

sideEffects": [ "*.css"]

沒(méi)有靜態(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)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市礁遵,隨后出現(xiàn)的幾起案子轻绞,更是在濱河造成了極大的恐慌,老刑警劉巖佣耐,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件政勃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡兼砖,警方通過(guò)查閱死者的電腦和手機(jī)奸远,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)讽挟,“玉大人然走,你說(shuō)我怎么就攤上這事∠返玻” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵晨仑,是天一觀的道長(zhǎng)褐墅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)洪己,這世上最難降的妖魔是什么妥凳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮答捕,結(jié)果婚禮上逝钥,老公的妹妹穿的比我還像新娘。我一直安慰自己拱镐,他們只是感情好艘款,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著沃琅,像睡著了一般哗咆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上益眉,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天晌柬,我揣著相機(jī)與錄音,去河邊找鬼郭脂。 笑死年碘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的展鸡。 我是一名探鬼主播屿衅,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼莹弊!你這毒婦竟也來(lái)了傲诵?” 一聲冷哼從身側(cè)響起凯砍,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拴竹,沒(méi)想到半個(gè)月后悟衩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡栓拜,尸身上長(zhǎng)有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
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胃榕。 院中可真熱鬧盛险,春花似錦、人聲如沸勋又。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)楔壤。三九已至鸟蜡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挺邀,已是汗流浹背揉忘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留端铛,地道東北人泣矛。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像禾蚕,于是被迫代替她去往敵國(guó)和親您朽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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