tree shaking 是构建阶段基于 es6 模块静态分析的死代码消除技术,通过标记并剔除未被 import 引用的 export 代码来减小打包体积;它依赖 import/export 语法,不支持 commonjs,需生产模式、正确 sideeffects 配置及按需引入才能生效。

Tree Shaking 能直接减小最终打包产物的体积,从而缩短下载和解析时间,自然提升首屏加载速度和运行效率。它不是运行时优化,而是构建阶段的“瘦身”——只保留真正被调用的代码,不打包任何冗余逻辑。
确保使用 ES6 模块语法
Tree Shaking 依赖静态分析,只有 import/export 能被准确识别;require/module.exports 是动态的,会被完全跳过。
- 项目中所有自定义模块都用
export function xxx或export const xxx,避免export default { a, b }这类对象式导出 - 引入第三方库时,优先选提供
"module"字段的版本(如lodash-es而非lodash) - 如果用了 Babel,确认
@babel/preset-env没把import编译成require(设置modules: false)
配置构建工具启用生产模式
Webpack 5、Vite、Rollup 默认在 production 模式下开启 Tree Shaking,但需确认未被覆盖。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- Webpack:检查
mode: "production"已设置,且未手动关闭optimization.usedExports - Vite:默认开启,无需额外配置;若用 legacy 插件或自定义 rollupOptions,注意保留
treeshake: true - 避免在
package.json中误设"sideEffects": true—— 应改为false或精确列出有副作用的文件(如["*.css", "index.js"])
按需引入,避免整包导入
即使库支持 Tree Shaking,错误的写法也会让整包“卡住”不被摇掉。
- ❌ 错误:
import _ from 'lodash-es'; console.log(_.debounce);—— 命名空间引用会阻止摇树 - ✅ 正确:
import { debounce } from 'lodash-es'; - 对 uiw、ant-design 等组件库,直接导入子路径更可靠:
import Button from '@uiw/react-button';或import { Button } from '@uiw/react-components'; - React 组件也适用:导出单个组件并具名导出,比默认导出一个对象更利于摇树
验证是否生效
别依赖猜测,用实际产物确认效果。
- 用
webpack-bundle-analyzer可视化分析 chunk 构成,查看目标函数是否出现在输出中 - 临时加一行未使用的导入:
import { unusedHelper } from './utils';,再对比构建体积变化 - 检查最终 JS 文件里是否还存在明显未调用的函数体或类定义
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










