bun build 运行更快,因为打印的代码更少。
CLI 用法
启用所有压缩
使用--minify 标志启用所有压缩模式:
--minify 标志会自动启用:
- 空白字符压缩
- 语法压缩
- 标识符压缩
生产模式
--production 标志会自动启用压缩:
--production 标志还会:
- 设置
process.env.NODE_ENV为production - 启用生产模式下的 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 转换为数学表达式。
Input
Output
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
将简单模板字面量转换为常规字符串。
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
移除无副作用的逗号序列表达式。
Input
Output
三元条件折叠
模式:--minify-syntax
编译时计算常量条件的三元表达式。
Input
Output
一元表达式折叠
模式:--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 名称:
exports、module
空白字符移除
模式:--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-identifiers(需配置)
启用时,将对象属性名重命名为更短名称。
Input
Output(启用属性名重整)
模板字面量值折叠
模式:--minify-syntax
将非字符串插值值转为字符串并折叠进模板。
Input
Output
字符串长度常量折叠
模式:--minify-syntax
编译时计算字符串字面量的 .length 属性。
Input
Output
构造函数调用简化
模式:--minify-syntax
简化内置类型的构造函数调用。
Input
Output
单属性对象内联
模式:--minify-syntax
内联只有单个属性的对象的属性访问。
Input
Output
字符串 charCodeAt 常量折叠
模式: 始终生效 对 ASCII 字符串字面量计算charCodeAt()。
Input
Output
void 0 等价 null 相等转换
模式:--minify-syntax
将与 void 0 的宽松相等转换为 null,因为等价。
Input
Output
取反操作符优化
模式:--minify-syntax
将取反操作符移至逗号表达式内。
Input
Output
Import.meta 属性内联
模式: 打包模式下 构建时内联已知的import.meta 属性值。
Input
Output
变量声明合并
模式:--minify-syntax
合并相邻的相同类型变量声明。
Input
Output
表达式语句合并
模式:--minify-syntax
使用逗号运算符合并相邻表达式语句。
Input
Output
return 语句合并
模式:--minify-syntax
合并 return 前的表达式,使用逗号运算符。
Input
Output
throw 语句合并
模式:--minify-syntax
合并 throw 前的表达式,使用逗号运算符。
Input
Output
TypeScript 枚举跨模块内联
模式:--minify-syntax(打包模式)
跨模块边界内联枚举值。
Input
Output
计算属性枚举内联
模式:--minify-syntax
内联用作计算属性对象属性的枚举值。
Input
Output
字符串数字转数字索引
模式:--minify-syntax
将字符串数字属性访问转换为数字索引。
Input
Output
箭头函数主体简写
模式: 始终生效 当箭头函数仅返回值时,使用表达式主体语法。Input
Output
对象属性简写
模式: 始终生效 当属性名与值的标识符相同时,使用简写语法。Input
Output
方法简写
模式: 始终生效 在对象字面量中使用方法简写语法。Input
Output
移除 debugger 语句
模式:--drop=debugger
移除代码中的 debugger 语句。
Input
Output
移除 console 调用
模式:--drop=console
移除所有 console.* 方法调用。
Input
Output
移除自定义函数调用
模式:--drop=<name>
移除指定全局函数或方法的调用。
Input
Output(使用 --drop=assert)
保留名称
压缩标识符时,如果想保留原始函数和类名以便调试,可以使用--keep-names 标志:
.name 属性,同时仍压缩实际的标识符名称。
组合示例
同时使用三种压缩模式:input.ts (158 bytes)
output.js
何时使用压缩
适用--minify 的场景:
- 生产环境包
- 降低 CDN 带宽成本
- 提升页面加载速度
--minify-whitespace: 快速减小尺寸,不改变语义--minify-syntax: 输出更小,同时保留可读标识符,便于调试--minify-identifiers: 最大尺寸减小(结合--keep-names可得更好的堆栈信息)
- 开发构建(调试更困难)
- 需要可读错误信息时
- 代码库供消费者阅读源码的库