Tree Shaking实现原理

158 阅读1分钟

gitee测试代码

cjs和esmodule区别

基于ES Module规范的DCE(Dead Code Elimination),在运行过程中静态分析模块之间的导入导出

import module from "./module.js"

实现原理

  • 标记:收集模块导出变量并记录到模块依赖关系图ModuleGraph中
  • 删除(Terser):遍历ModuleGraph标记模块导出变量有没有被使用
  • 输出:若变量没有被其他模块使用则删除对应的导出语句

标记功能需要配置 optimization.usedExports = true开启