认识
2023年12月24日
一、认识
Tree Shaking
是一个术语,通常用于描述移除 JavaScript
上下文中的未引用代码(dead-code
)。它依赖于 ES2015
模块系统中的静态结构特性,例如 import
和export
。这个术语和概念实际上是兴起于 ES2015
模块打包工具 rollup
。
Tree Shaking
利用 ES6
模块的特点,只能作为模块顶层语句出现。import
的模块名只能是字符串常量。Tree Shaking
在去除冗余代码的过程中,程序会从入口文件出发,扫描所有的模块依赖,以及模块的子依赖,然后将它们链接起来形成一个抽象语法树(AST
)。随后,运行所有代码,查看哪些代码是用到过的,做好标记。最后,再将抽象语法树中没有用到的代码摇落。经历这样一个过程后,就去除了没有用到的代码。
前提是模块必须采用 ES6 Module
语法,因为 Tree Shaking
依赖 ES6
的静态语法:import
和 export
。不同于 ES6 Module
,CommonJS
支持动态加载模块,在加载前是无法确定模块是否有被调用,所以并不支持 Tree Shaking
。