<p>验证 Tree Shaking 是否生效的关键是检查最终产物:搜索 bundle 中 / unused harmony export xxx / 标记;用 webpack-bundle-analyzer 查看依赖图中未引用模块是否消失;或通过增删导入做体积对比,若体积不变则说明已成功剔除。</p>

验证 Tree Shaking 是否生效,关键不是“看配置有没有开”,而是直接检查最终产物中是否真的剔除了未使用的导出。下面几种方法实操性强、结果明确。
检查打包产物源码中的标记
Webpack 在启用 usedExports: true 后,会对未使用的导出添加注释标记:
- 搜索 dist 目录下生成的 bundle 文件(如
main.js),查找/* unused harmony export xxx */ - 如果看到类似
/* unused harmony export subtract */,说明 Webpack 已识别并标记该导出为未使用 - 再配合 Terser 压缩(production 模式默认开启),这些被标记的代码通常会被真正删除
用 webpack-bundle-analyzer 可视化分析
这是最直观的验证方式:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 安装插件:
npm install --save-dev webpack-bundle-analyzer - 构建时加参数:
next build --stats(Next.js)或webpack --stats=verbose --json > stats.json(原生 Webpack) - 运行
npx webpack-bundle-analyzer stats.json,打开可视化界面 - 在模块依赖图中,未被引用的工具函数、辅助模块往往不会出现,或显示为“0 KB”且无入边
主动引入一个未使用导出做体积对比
用“反向验证法”快速判断效果:
立即学习“Java免费学习笔记(深入)”;
- 在入口文件(如
index.js或_app.tsx)中临时加入一行:import { someUnusedHelper } from './utils'; - 执行构建(
next build或npm run build),记录输出体积(如dist/size.txt或终端显示的 gzip 大小) - 删掉这行 import,再次构建,对比两次体积差异
- 若体积完全一致,说明该导出已被成功摇掉;若明显变大,说明它本就参与了打包——可能因副作用、动态引用或 CommonJS 混用导致失效
查看编译日志中的导出分析详情
Webpack 5+ 支持细粒度导出追踪:
- 构建时加上
--stats=normal或--stats=verbose - 在日志中搜索
export或used exports,可看到类似:./src/utils.js 2.4 KiB [built] [1 used exports] - 若某模块显示
0 used exports,但又没被完全排除,就要检查是否被间接引用或存在副作用

















