最准确测试不同tree shaking配置对包体积影响的方式是:统一构建环境、固定变量、用webpack-bundle-analyzer生成static模式html报告,重点关注parsed size,并通过grep验证未使用代码是否真实移除,结合gzip体积量化对比。

要准确测试不同 Tree Shaking 配置对包体积的影响,核心是**统一构建环境、固定变量、可视化对比差异**。不能只看文件大小数字,而要看实际进入最终 bundle 的代码量。
生成可比对的打包报告
用 webpack-bundle-analyzer 生成交互式体积图,这是最直观的方式:
- 安装插件:
npm install --save-dev webpack-bundle-analyzer - 在 Webpack 配置中添加插件,设置
analyzerMode: 'static'生成 HTML 报告(避免 server 模式干扰多次构建) - 每次修改配置后,运行
npm run build,生成独立的report.html文件,保存为report-before.html、report-after.html等便于回溯 - 重点关注
parsed size(Webpack 解析后的真实体积),而非stat size(原始源码大小)
控制变量,隔离配置影响
Tree Shaking 效果受多个因素叠加影响,测试时需逐项验证:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 确保
mode: 'production'始终开启(否则usedExports和sideEffects不生效) - 对比前先清空缓存:
rm -rf node_modules/.cache和dist/,避免旧产物干扰 - 固定依赖版本:用
npm ci替代npm install,防止锁文件漂移 - 禁用无关优化(如压缩、图片处理),只保留 Tree Shaking 相关配置,例如:
optimization: { minimize: false, concatenateModules: true }
验证是否真正摇掉代码
光看体积数字不够,要确认未使用代码确实没进 bundle:
- 在源码中添加一个明显标记函数(如
export function __TEST_TREE_SHAKING__(){ return 'dead-code'; }) - 不 import 它,构建后搜索 dist 中是否还存在该字符串(可用
grep -r '__TEST_TREE_SHAKING__' dist/) - 对比启用
sideEffects: false和显式声明sideEffects: ['*.css']时,CSS 是否被误删 - 检查第三方库是否提供 ESM 入口:查看其
package.json是否有"module": "es/index.js"字段
量化对比不同导入方式
同一组件库,不同写法体积差异极大,建议用最小复现案例实测:
- 方式 A:
import { Button } from 'uiw'(全包命名导入) - 方式 B:
import Button from '@uiw/react-button'(子包直引) - 方式 C:
import Button from 'uiw/lib/Button'(传统 lib 入口,通常无 Tree Shaking) - 分别构建,用
gzip -c dist/js/app.*.js | wc -c获取 gzip 后真实传输体积,更贴近线上效果
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










