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
将布尔字面量转换为更短的表达式。
输入
输出
布尔代数优化
模式:--minify-syntax
使用逻辑规则简化布尔表达式。
输入
输出
undefined 缩短
模式:--minify-syntax
将 undefined 替换为更短的等效形式。
输入
输出
undefined 相等优化
模式:--minify-syntax
优化与 undefined 的宽松相等检查。
输入
输出
Infinity 缩短
模式:--minify-syntax
将 Infinity 转换为数学表达式。
输入
输出
typeof 优化
模式:--minify-syntax
优化 typeof 比较并评估常量 typeof 表达式。
输入
输出
数字格式化
模式:--minify-syntax
以最紧凑的表示形式格式化数字。
输入
输出
算术常量折叠
模式:--minify-syntax
在编译时评估算术运算。
输入
输出
位运算常量折叠
模式:--minify-syntax
在编译时评估位运算。
输入
输出
字符串拼接
模式:--minify-syntax
在编译时合并字符串字面量。
输入
输出
字符串索引
模式:--minify-syntax
在编译时评估字符串字符访问。
输入
输出
模板字面量折叠
模式:--minify-syntax
评估带有常量表达式的模板字面量。
输入
输出
模板字面量转字符串
模式:--minify-syntax
将没有替换内容的模板字面量转换为常规字符串。
输入
输出
字符串引号优化
模式:--minify-syntax
选择最佳引号字符以最小化转义。
输入
输出
数组展开内联
模式:--minify-syntax
内联带有常量数组的数组展开操作。
输入
输出
数组索引
模式:--minify-syntax
在编译时评估常量数组访问。
输入
输出
属性访问优化
模式:--minify-syntax
在可能的情况下将方括号表示法转换为点号表示法。
输入
输出
比较折叠
模式:--minify-syntax
在编译时评估常量比较。
输入
输出
逻辑运算折叠
模式:--minify-syntax
使用常量值简化逻辑运算。
输入
输出
空值合并折叠
模式:--minify-syntax
使用已知值评估空值合并。
输入
输出
逗号表达式简化
模式:--minify-syntax
从逗号序列中移除无副作用的表达式。
输入
输出
三元条件折叠
模式:--minify-syntax
使用常量条件评估条件表达式。
输入
输出
一元表达式折叠
模式:--minify-syntax
简化一元运算。
输入
输出
双重否定移除
模式:--minify-syntax
移除不必要的双重否定。
输入
输出
if 语句优化
模式:--minify-syntax
使用常量条件优化 if 语句。
输入
输出
死代码消除
模式:--minify-syntax
移除不可达代码和无副作用的代码。
输入
输出
不可达分支移除
模式:--minify-syntax
移除永远不会执行的分支。
输入
输出
空块移除
模式:--minify-syntax
移除空块和不必要的花括号。
输入
输出
单语句块解包
模式:--minify-syntax
移除单个语句周围的不必要花括号。
输入
输出
TypeScript 枚举内联
模式:--minify-syntax
在编译时内联 TypeScript 枚举值。
输入
输出
Pure 注解支持
模式: 始终激活 尊重用于 tree shaking(移除未使用代码)的/*@__PURE__*/ 注解。
输入
输出
标识符重命名
模式:--minify-identifiers
根据使用频率将局部变量重命名为更短的名称。
输入
输出
- 最频繁使用的标识符获得最短名称(a、b、c……)
- 单字母:a-z(26 个名称)
- 双字母:aa-zz(676 个名称)
- 根据需要三字母及以上
- JavaScript 关键字和保留字
- 全局标识符
- 命名导出(以维护 API)
- CommonJS 名称:
exports、module
空白移除
模式:--minify-whitespace
移除所有不必要的空白。
输入
输出
分号优化
模式:--minify-whitespace
仅在必要时插入分号。
输入
输出
运算符间距移除
模式:--minify-whitespace
移除运算符周围的空格。
输入
输出
注释移除
模式:--minify-whitespace
移除注释,但保留重要的许可证注释。
输入
输出
对象和数组格式化
模式:--minify-whitespace
移除对象和数组字面量中的空白。
输入
输出
控制流格式化
模式:--minify-whitespace
移除控制结构中的空白。
输入
输出
函数格式化
模式:--minify-whitespace
移除函数声明中的空白。
输入
输出
括号最小化
模式: 始终激活 仅在运算符优先级需要时添加括号。输入
输出
模板字面量值折叠
模式:--minify-syntax
将非字符串插值值转换为字符串并折叠到模板中。
输入
输出
字符串长度常量折叠
模式:--minify-syntax
在编译时评估字符串字面量上的 .length 属性。
输入
输出
构造函数调用简化
模式:--minify-syntax
简化内置类型的构造函数调用。
输入
输出
单属性对象内联
模式:--minify-syntax
内联只有一个属性的对象的属性访问。
输入
输出
字符串 charCodeAt 常量折叠
模式: 始终激活 在 ASCII 字符的字符串字面量上评估charCodeAt()。
输入
输出
Void 0 相等转 null 相等
模式:--minify-syntax
将 void 0 的宽松相等检查转换为 null,因为它们是等价的。
输入
输出
否定运算符优化
模式:--minify-syntax
将否定运算符移过逗号表达式。
输入
输出
Import.meta 属性内联
模式: 打包模式 在知道值时于构建时内联import.meta 属性。
输入
输出
变量声明合并
模式:--minify-syntax
合并同类型相邻的变量声明。
输入
输出
表达式语句合并
模式:--minify-syntax
使用逗号运算符合并相邻的表达式语句。
输入
输出
return 语句合并
模式:--minify-syntax
使用逗号运算符合并 return 前的表达式。
输入
输出
throw 语句合并
模式:--minify-syntax
使用逗号运算符合并 throw 前的表达式。
输入
输出
TypeScript 枚举跨模块内联
模式:--minify-syntax(打包模式)
跨模块边界内联枚举值。
输入
输出
计算属性枚举内联
模式:--minify-syntax
内联用作计算对象属性的枚举值。
输入
输出
箭头函数体缩短
模式:--minify-syntax
当箭头函数只返回一个值时使用表达式体语法。
输入
输出
对象属性简写
模式: 始终激活 当属性名和值标识符匹配时使用简写语法。输入
输出
丢弃 debugger 语句
模式:--drop=debugger
从代码中移除 debugger 语句。
输入
输出
丢弃 console 调用
模式:--drop=console
从代码中移除所有 console.* 方法调用。
输入
输出
丢弃自定义函数调用
模式:--drop=<name>
移除对指定全局函数及其方法的调用。
输入
使用 --drop=assert 输出
保留名称
要在压缩标识符时保留原始函数和类名以便调试,使用--keep-names 标志:
--keep-names 保留函数和类上的 .name 属性,同时仍然压缩标识符本身。
组合示例
同时使用所有三种压缩模式:input.ts (158 bytes)
output.js
何时使用压缩
对以下场景使用--minify:
- 生产包
- 减少 CDN 带宽成本
- 改善页面加载时间
--minify-whitespace: 在不改变语义的情况下减小体积--minify-syntax: 减小输出,同时保留可读标识符以便调试--minify-identifiers: 最大体积缩减(与--keep-names结合以获得更好的堆栈跟踪)
- 开发构建(更难调试)
- 需要可读错误消息时
- 消费者可能阅读源代码的库