4.9 Tree Shaking優(yōu)化
問題一:什么是 Tree Shaking?
Tree Shaking 可以用來剔除 JavaScript 中用不上的死代碼涂籽。它依賴靜態(tài)的 ES6 模塊化語法灭衷,例如通過import和export導(dǎo)入導(dǎo)出胚鸯。
舉例如下
假如有一個文件util.js里存放了很多工具函數(shù)和常量,在main.js中會導(dǎo)入和使用util.js座菠,代碼如下:
util.js源碼:
export function funcA() {
}
export function funB() {
}
export const a = 'a';
main.js源碼:
import {funcA} from './util.js';
funcA();
Tree Shaking 后的util.js:
export function funcA() {
}
由于只用到了util.js中的funcA,所以剩下的都被 Tree Shaking 當(dāng)作死代碼給剔除了藤树。
問題二:Tree Shaking 正常工作的前提浴滴?
Tree Shaking 正常工作的前提是交給 Webpack 的 JavaScript 代碼必須是采用 ES6 模塊化語法的, 因為 ES6 模塊化語法是靜態(tài)的(導(dǎo)入導(dǎo)出語句中的路徑必須是靜態(tài)的字符串岁钓,而且不能放入其它代碼塊中)升略,這讓 Webpack 可以簡單的分析出哪些export的被import過了微王。 如果你采用 ES5 中的模塊化,例如module.export={...}品嚣、require(x+y)炕倘、if(x){require('./util')},Webpack 無法分析出哪些代碼可以剔除翰撑。
問題三:Tree Shaking 局限性罩旋?
不會對entry入口文件做 Tree Shaking。
不會對異步分割出去的代碼做 Tree Shaking眶诈。