Skip to main content
Bun 内置了一个快速的 JavaScript 和 TypeScript 压缩器,可以根据代码库情况将包大小减少 80% 甚至更多,同时提升输出代码的运行速度。该压缩器执行了数十种优化,包括常量折叠、死代码消除和语法转换。与其他压缩器不同,Bun 的压缩器还能让 bun build 运行更快,因为打印的代码更少。

CLI 用法

启用所有压缩

使用 --minify 标志启用所有压缩模式:
--minify 标志启用:
  • 空白字符压缩
  • 语法压缩
  • 标识符压缩

生产模式

--production 标志会自动启用压缩:
--production 标志还会:
  • 设置 process.env.NODE_ENVproduction
  • 启用生产模式下的 JSX 导入和转换

细粒度控制

分别启用特定的压缩模式:

JavaScript API

使用 Bun 的打包器进行编程时,通过 minify 选项配置压缩:
细粒度控制则传入对象:

压缩模式

Bun 的压缩器有三种彼此独立的模式,你可以分别或同时启用。

空白字符压缩(--minify-whitespace

移除输出中的所有多余空白字符、换行和格式。

语法压缩(--minify-syntax

将 JavaScript 语法重写为更短的等效形式,并执行常量折叠、死代码消除及其他优化。

标识符压缩(--minify-identifiers

根据使用频率重命名局部变量和函数名为更短的标识符。

所有转换。

布尔字面量缩短

模式: --minify-syntax 将布尔字面量转换为更短的表达式。
Input
Output

布尔代数优化

模式: --minify-syntax 通过逻辑规则简化布尔表达式。
Input
Output

undefined 缩短

模式: --minify-syntax 用更短的等效表达式替换 undefined
Input
Output

undefined 相等性优化

模式: --minify-syntax 优化与 undefined 的宽松相等检查。
Input
Output

Infinity 缩短

模式: --minify-syntax 将 Infinity 转换为数学表达式。
输入
输出

typeof 优化

模式: --minify-syntax 优化 typeof 对比并求值常量 typeof 表达式。
Input
Output

数字格式化

模式: --minify-syntax 以最紧凑形式格式化数字。
Input
Output

算术常量折叠

模式: --minify-syntax 编译时计算算术运算。
Input
Output

位运算常量折叠

模式: --minify-syntax 编译时计算位运算。
Input
Output

字符串拼接

模式: --minify-syntax 编译时合并字符串字面量。
Input
Output

字符串索引

模式: --minify-syntax 编译时计算字符串字符访问。
Input
Output

模板字面量折叠

模式: --minify-syntax 编译时计算带常量表达式的模板字面量。
Input
Output

模板字面量转字符串

模式: --minify-syntax 将不包含插值的模板字面量转换为普通字符串。
输入
输出

字符串引号优化

模式: --minify-syntax 选择最优引号以减少转义。
Input
Output

数组展开内联

模式: --minify-syntax 内联对常量数组的数组展开操作。
Input
Output

数组索引

模式: --minify-syntax 编译时计算常量数组访问。
Input
Output

属性访问优化

模式: --minify-syntax 可用时将括号访问转换为点访问。
Input
Output

比较折叠

模式: --minify-syntax 编译时计算常量比较。
Input
Output

逻辑操作折叠

模式: --minify-syntax 简化带常量值的逻辑操作。
Input
Output

空值合并折叠

模式: --minify-syntax 编译时计算已知值的空值合并操作。
Input
Output

逗号表达式简化

模式: --minify-syntax 移除无副作用的逗号序列表达式。
Input
Output

三元条件折叠

模式: --minify-syntax 编译时计算常量条件的三元表达式。
输入
输出

一元表达式折叠

模式: --minify-syntax 简化一元操作。
Input
Output

双重否定移除

模式: --minify-syntax 移除不必要的双重否定。
Input
Output

if 语句优化

模式: --minify-syntax 优化常量条件的 if 语句。
Input
Output

死代码消除

模式: --minify-syntax 移除不可达和无副作用代码。
Input
Output

不可达分支移除

模式: --minify-syntax 移除永远不会执行的分支。
Input
Output

空块移除

模式: --minify-syntax 移除空块和多余的大括号。
Input
Output

单语句块展开

模式: --minify-syntax 移除单语句块多余的大括号。
Input
Output

TypeScript 枚举内联

模式: --minify-syntax 编译时内联 TypeScript 枚举值。
Input
Output

纯净标注支持

模式: 始终生效 遵循 /*@__PURE__*/ 标注以进行摇树优化(移除未使用的代码)。
Input
Output

标识符重命名

模式: --minify-identifiers 根据使用频率重命名局部变量为更短的名称。
Input
Output
命名策略:
  • 使用频率最高的标识符获得最短名称(a, b, c…)
  • 单字母:a-z(共 26 个)
  • 双字母:aa-zz(676 个)
  • 必要时使用三字母及以上
保留标识符:
  • JavaScript 关键字和保留字
  • 全局标识符
  • 命名导出(保持 API 稳定)
  • CommonJS 名称:exportsmodule

空白字符移除

模式: --minify-whitespace 移除所有多余空白。
Input
Output

分号优化

模式: --minify-whitespace 仅在必要时插入分号。
Input
Output

操作符空格移除

模式: --minify-whitespace 移除操作符周围空格。
Input
Output

注释移除

模式: --minify-whitespace 移除注释,但保留重要的许可证注释。
Input
Output

对象和数组格式化

模式: --minify-whitespace 移除对象和数组字面量内空白。
Input
Output

控制流格式化

模式: --minify-whitespace 移除控制结构内空白。
Input
Output

函数格式化

模式: --minify-whitespace 移除函数声明内空白。
Input
Output

括号最小化

模式: 始终生效 仅在优先级需要时添加括号。
Input
Output

模板字面量值折叠

模式: --minify-syntax 将非字符串插值值转为字符串并折叠进模板。
Input
Output

字符串长度常量折叠

模式: --minify-syntax 编译时计算字符串字面量的 .length 属性。
Input
Output

构造函数调用简化

模式: --minify-syntax 简化内置类型的构造函数调用。
Input
Output

单属性对象内联

模式: --minify-syntax 内联只有单个属性的对象的属性访问。
Input
Output

字符串 charCodeAt 常量折叠

模式: 始终生效 对 ASCII 字符串字面量计算 charCodeAt()
输入
输出

void 0 等价 null 相等转换

模式: --minify-syntax 将与 void 0 的宽松相等转换为 null,因为等价。
Input
Output

取反操作符优化

模式: --minify-syntax 将取反操作符移至逗号表达式内。
Input
Output

Import.meta 属性内联

模式: 打包模式下 构建时内联已知的 import.meta 属性值。
Input
Output

变量声明合并

模式: --minify-syntax 合并相邻的相同类型变量声明。
输入
输出

表达式语句合并

模式: --minify-syntax 使用逗号运算符合并相邻表达式语句。
Input
Output

return 语句合并

模式: --minify-syntax 合并 return 前的表达式,使用逗号运算符。
输入
输出

throw 语句合并

模式: --minify-syntax 合并 throw 前的表达式,使用逗号运算符。
Input
Output

TypeScript 枚举跨模块内联

模式: --minify-syntax(打包模式) 跨模块边界内联枚举值。
输入
输出

计算属性枚举内联

模式: --minify-syntax 内联用作计算属性对象属性的枚举值。
Input
Output

箭头函数主体简化

模式: --minify-syntax 当箭头函数仅返回值时,使用表达式主体语法。
输入
输出

对象属性简写

模式: 始终生效 当属性名与值的标识符相同时,使用简写语法。
Input
Output

移除 debugger 语句

模式: --drop=debugger 移除代码中的 debugger 语句。
Input
Output

移除 console 调用

模式: --drop=console 移除所有 console.* 方法调用。
Input
Output

移除自定义函数调用

模式: --drop=<name> 移除对指定全局函数及其方法的调用。
输入
输出(使用 --drop=assert)

保留名称

为了在压缩标识符的同时保留原始函数名和类名以便调试,请使用 --keep-names 标志:
或者在 JavaScript API 中:
--keep-names 会在继续压缩标识符的同时,保留函数和类的 .name 属性。

组合示例

同时使用三种压缩模式:
input.ts (158 bytes)
output.js

何时使用压缩

适用 --minify 的场景:
  • 生产环境包
  • 降低 CDN 带宽成本
  • 提升页面加载速度
适用单独模式的场景:
  • --minify-whitespace: 在不改变语义的情况下减小体积
  • --minify-syntax: 在保留可读标识符以便调试的同时生成更小的输出
  • --minify-identifiers: 最大限度地减小体积(结合 --keep-names 以获得更好的堆栈跟踪)
避免压缩的场景:
  • 开发构建(调试更困难)
  • 需要可读错误信息时
  • 代码库供消费者阅读源码的库。