tree-shaking 是 webpack2 新增的一種功能
什么是 tree-shaking
從文件入口作為起點(diǎn),分析模塊的依賴(lài)關(guān)系,把沒(méi)有用掉的模塊刪掉
tree-shaking 原理
tree-shaking 是 DCE 的一種新的實(shí)現(xiàn)
DCE(dead code elimination)
編譯器會(huì)判斷哪些代碼不影響輸出,然后消除這些代碼
注意: tree-shaking 和傳統(tǒng)的 DCE 方法不太一樣,傳統(tǒng)的 DCE 消滅不可能執(zhí)行的代碼,而 tree-shaking 更關(guān)注消除沒(méi)有用到的代碼
js 的 DCE
在編譯型語(yǔ)言中,都是由編譯器將 dead code 從 AST 中刪除
關(guān)于 js 的 DCE,在 js 代碼被送到瀏覽器之前已經(jīng)做好了 DCE,這個(gè)工作是由代碼壓縮優(yōu)化工具 uglify 完成的
tree-shaking 的基礎(chǔ)
tree-shaking 的消除原理是依賴(lài)于 ES6 的模塊特性:
ES6 模塊的依賴(lài)關(guān)系是確定的,和運(yùn)行時(shí)的狀態(tài)無(wú)關(guān),可以不執(zhí)行代碼,從字面量上對(duì)代碼進(jìn)行分析