esbuild 默认开启 tree shaking,只需在构建配置中将 minify 设为 true 即可生效。该功能依赖于 es module 的静态分析,会自动移除未引用的代码并压缩输出。若需进一步控制,可结合 treeshaking: 'trusted' 启用更严格的模式。

esbuild 如何配置 Tree Shaking 参数
在 esbuild 中,Tree Shaking 是内置行为,无需额外插件。通过设置 minify: true 触发压缩时,esbuild 会执行死代码消除。对于依赖外部模块或动态导入的场景,可使用 treeShaking: 'trusted' 来优化结果。

const esbuild = require('esbuild');
esbuild.build({
entryPoints: ['src/index.js'],
bundle: true,
minify: true,
treeShaking: 'trusted',
outfile: 'dist/bundle.js'
}).catch(() => process.exit(1));
运行上述命令后,dist/bundle.js 将包含经过 Tree Shaking 和压缩的代码。未使用的函数、变量和类将被移除,同时代码会被压缩为单行格式。
Tree Shaking 对 CommonJS 模块的支持情况
esbuild 的 Tree Shaking 仅支持 ES Module(ESM)语法。若项目使用 CommonJS(CJS),需先转换为 ESM 或使用 --format=esm 选项。转换后,esbuild 能正确识别导出和引用关系,从而进行有效的代码剔除。

// src/utils.js (ESM)
export function add(a, b) { return a + b; }
export function subtract(a, b) { return a - b; }
// src/index.js (ESM)
import { add } from './utils.js';
console.log(add(1, 2)); // 仅 add 被保留
当输入为上述 ESM 代码时,输出中仅包含 add 函数,subtract 因未被引用而被移除。若改用 CJS 语法,esbuild 无法进行静态分析,Tree Shaking 将失效。
Tree Shaking 如何处理条件分支中的代码
esbuild 在 Tree Shaking 时会评估常量条件分支。若条件为字面量布尔值,esbuild 会直接保留或移除对应分支。例如,if (false) { ... } 中的代码将被完全剔除,而 if (true) { ... } 中的代码会被保留。这种处理基于静态分析,不涉及运行时逻辑。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











