webpack工程化05(tree shaking)

在項目開發(fā)中筋粗,可能會遇到這樣的問題,就是一個方法庫敦间,我們只用了其中的一兩個方法瓶逃,但是打包的時候還是會把所有的方法都打包進(jìn)去了。這明顯是不合理的廓块,怎么辦呢厢绝?

下面給大家介紹webpack的tree shaking就是來解決這些問題的。

先來說說什么是tree shaking带猴?

在webpack中一般有一個入口文件昔汉,像一個樹一樣,入口文件有很多依賴的模塊拴清,這些模塊就像是樹干靶病。而tree shaking則是要把這棵樹上多余的,用不到的方法給搖掉口予,其實就是去除用不到的方法娄周,變量,起到優(yōu)化的作用沪停,特別是有第三方依賴的時候煤辨。

我們先看一個簡單的demo。


//A.js
function methosA() {
    console.log('this is methosA')
}

function methosB() {
    console.log('this is methosB')
}

function methosC() {
    console.log('this is methosC')
}

function methosD() {
    console.log('this is methosD')
}

function methosE() {
    console.log('this is methosE')
}

export  {
    methosA,
    methosB
}
import { methosA }  from './methods/A'
if(false) {
    console.log('this is need delete code')
}
console.log(methosA())
//webpack.config.js
const path = require('path')
module.exports = {
    entry: {
        app: path.join(__dirname, 'src/app.js')
    },
    output: {
        filename: '[name].bundle.js',
        path: path.join(__dirname, 'dist')
    }
}

如果是webpack3的版本木张,打包之后是會把A.js中的所有文件都打包進(jìn)去众辨,所以tree-sharking需要借助插件。


如果是webpack4版本舷礼,自動會進(jìn)行壓縮和打包鹃彻。

那么如果有第三方插件怎么辦呢?

import { methosA }  from './methods/A'
import { chunk } from 'lodash'


console.log(chunk([1,2,3,4,5,6,7],2))
if(false) {
    console.log('this is need delete code')
}
console.log(methosA())

比如我引入了lodash這個第三方模塊妻献,我們打包看看浮声。

我們只用了一個方法,不可能會有這么大的文件旋奢,所以打包是失敗的泳挥。

我們再加上插件(webpack中的新插件UglifyjsWebpackPlugin)

    plugins: [
        new UglifyJsPlugin()
    ]

再次打包也還是不行,這是為什么呢至朗?

這需要講幾句tree-sharking的原理屉符,tree-sharking是靜態(tài)的去分析代碼,而ES6模塊依賴關(guān)系是確定的,和運行時的狀態(tài)無關(guān)矗钟,可以進(jìn)行可靠的靜態(tài)分析唆香,這就是tree-shaking的基礎(chǔ)。(https://juejin.im/post/5a4dc842518825698e7279a9 一篇介紹tree-shaking原理的文章)

而很多的第三方為了考慮兼容性吨艇,代碼都是通過babel編譯過的語法躬它。所以我們可以找一下這個第三方庫的es版本。

import { methosA }  from './methods/A'
import { chunk } from 'lodash-es'


console.log(chunk([1,2,3,4,5,6,7],2))
if(false) {
    console.log('this is need delete code')
}
console.log(methosA())

再執(zhí)行以下打包东涡。


注(webpack還有一個插件babel-minify-webpack-plugin冯吓,集合了babel和uglify,也可以用來tree-sharking)

下面說說css的tree-shaking

css的tree-shaking也很簡單,只要用一個插件(purifycss-webpack)疮跑,就能自動幫我們做tree-shaking.

在npm上有明確的用法


這里就不演示了组贺。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市祖娘,隨后出現(xiàn)的幾起案子失尖,更是在濱河造成了極大的恐慌,老刑警劉巖渐苏,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掀潮,死亡現(xiàn)場離奇詭異,居然都是意外死亡琼富,警方通過查閱死者的電腦和手機胧辽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來公黑,“玉大人,你說我怎么就攤上這事摄咆》惭粒” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵吭从,是天一觀的道長朝蜘。 經(jīng)常有香客問我,道長涩金,這世上最難降的妖魔是什么谱醇? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮步做,結(jié)果婚禮上副渴,老公的妹妹穿的比我還像新娘。我一直安慰自己全度,他們只是感情好煮剧,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般勉盅。 火紅的嫁衣襯著肌膚如雪佑颇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天草娜,我揣著相機與錄音挑胸,去河邊找鬼。 笑死宰闰,一個胖子當(dāng)著我的面吹牛茬贵,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播议蟆,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼闷沥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了咐容?” 一聲冷哼從身側(cè)響起舆逃,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎戳粒,沒想到半個月后路狮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡蔚约,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年奄妨,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苹祟。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡砸抛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出树枫,到底是詐尸還是另有隱情直焙,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布砂轻,位于F島的核電站奔誓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏搔涝。R本人自食惡果不足惜厨喂,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庄呈。 院中可真熱鬧蜕煌,春花似錦、人聲如沸诬留。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至傀广,卻和暖如春颁独,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伪冰。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工誓酒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贮聂。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓靠柑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吓懈。 傳聞我的和親對象是個殘疾皇子歼冰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

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