当前位置: 首页 > 后端技术 > Node.js

使用tree-shaking注意事项

时间:2023-04-03 16:40:14 Node.js

tree-shaking是基于ES6模块实现的:它只能作为模块的顶层语句出现。导入模块的名称只能是字符串常量。导入绑定是不可变的。ES6模块依赖是确定性的,与运行时的状态无关,可以进行可靠的静态分析。这是摇树的基础。所谓静态分析,就是在不执行代码的情况下,按字面分析代码。ES6之前的模块化,比如我们可以动态require一个模块。只有执行后才能知道引用的是什么模块。这无法通过静态分析进行优化。这是ES6模块设计的一个重要考虑,也是为什么不直接采用CommonJS的原因。正是基于这个基础,tree-shaking才成为可能。这就是为什么rollup和webpack2必须使用ES6模块语法来tree-Shakingtree-shaking对函数有更好的效果。顶层函数相对容易分析。另外,babel默认使用“usestrict”严格模式,减少了动态访问顶层函数的方式,更容易分析。tree-shaking无法消除无意的引入类定义exportdefault对象导入后,default所附加的属性和方法即使不被调用也无法进行tree-shaking。因此,我们在组织模块文件时,尽量避免exportdefault{A,B,C}这样的写法。Webpack官网提到要启用模块的tree-shaking,需要满足以下四个条件:使用ES6importexport语句,保证ES6模块不被babel等编译器转换成ES5CommonJS。在项目的package.json文件中,必须有“sideEffects”属性的定义(false表示所有文件都没有副作用,可以启用TreeShaking)。使用Webpack的生产模式