4.9 Tree Shaking优化
问题一:什么是 Tree Shaking?
Tree Shaking 可以用来剔除 JavaScript 中用不上的死代码。它依赖静态的 ES6 模块化语法,例如通过import和export导入导出。
举例如下
假如有一个文件util.js里存放了很多工具函数和常量,在main.js中会导入和使用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 当作死代码给剔除了。
问题二:Tree Shaking 正常工作的前提?
Tree Shaking 正常工作的前提是交给 Webpack 的 JavaScript 代码必须是采用 ES6 模块化语法的, 因为 ES6 模块化语法是静态的(导入导出语句中的路径必须是静态的字符串,而且不能放入其它代码块中),这让 Webpack 可以简单的分析出哪些export的被import过了。 如果你采用 ES5 中的模块化,例如module.export={...}、require(x+y)、if(x){require('./util')},Webpack 无法分析出哪些代码可以剔除。
问题三:Tree Shaking 局限性?
不会对entry入口文件做 Tree Shaking。
不会对异步分割出去的代码做 Tree Shaking。