ES Modules 的静态分析能力是 Tree Shaking 的前提,要求使用标准 ESM 语法、正确配置打包工具、采用命名导出、避免隐式副作用,并优先引入库的 ESM 入口。

ES Modules 的静态分析能力是现代前端工程优化的关键基础。它不依赖运行时行为,而是通过 import 和 export 的固定语法结构,在构建阶段就能明确知道哪些代码被使用、哪些从未被引用——这正是消除冗余代码的前提。
确保模块使用标准 ESM 语法
Tree Shaking 只对符合 ESM 规范的代码生效。必须满足:
-
import和export只出现在模块顶层,不能放在条件语句或函数内部 - 避免混用 CommonJS(如
require或module.exports),否则打包工具会降级处理,失去静态分析能力 - 导出需显式声明,例如
export const helper = () => {},而不是动态挂载到对象上
配置打包工具启用 Tree Shaking
即使代码写对了,工具默认也可能不开启深度优化:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- Webpack:在
package.json中设置"sideEffects": false(若项目无副作用)或列出有副作用的文件(如 CSS、SVG 导入) - Rollup/Vite:默认启用,但需确认未通过插件(如 Babel)把 ESM 转成了 CommonJS
- 检查构建产物中是否还存在未调用的函数或常量,可借助
webpack-bundle-analyzer可视化验证
导出方式影响剪枝效果
命名导出比默认导出更利于精准剔除:
立即学习“Java免费学习笔记(深入)”;
- 推荐使用
export const a = ...; export function b() {...},再按需import { a } from './x' - 避免仅用
export default { a, b, c },这种对象聚合导出会阻碍工具识别单个属性是否被使用 - 若库提供 ESM 入口(如
"exports": { ".": { "import": "./index.mjs" } }),优先从该路径导入,而非 CJS 版本
避免隐式副作用干扰优化
即使某段代码没被直接调用,只要工具认为它可能产生副作用,就不会删除:
- 全局变量赋值、
console.log、修改原型、DOM 操作等都算副作用 - 第三方库若未正确标注
sideEffects: false,其整个模块可能被保留;可查阅其package.json或改用已做 ESM 适配的替代品 - 开发中临时注释掉的逻辑,如果仍保留在
export列表里,也会被当作潜在可用代码保留

















