
Bun 团队于 2026 年 1 月 13 日 正式发布了 Bun v1.3.6。本次更新带来了多项开发者期待已久的功能,涵盖打包构建、文件处理、测试工具、数据库操作等多个方面。以下是我们为你精选的核心新特性。
📦 新增 Bun.Archive API:原生创建与解压 Tarball
Bun 现在内置了 Bun.Archive API,无需任何第三方依赖即可高效地创建和提取 .tar 或 .tar.gz 压缩包。
创建归档
ts
const archive = new Bun.Archive({
"hello.txt": "Hello, World!",
"data.json": JSON.stringify({ foo: "bar" }),
"binary.bin": new Uint8Array([1, 2, 3, 4]),
});
// 获取为 Blob 或字节数组
const blob = await archive.blob();
const bytes = await archive.bytes();
// 写入本地或 S3
await Bun.write("archive.tar.gz", archive);
await Bun.write("s3://my-bucket/archive.tar.gz", archive);
提取归档
ts
const tarball = new Bun.Archive(await Bun.file("package.tar.gz").bytes());
const fileCount = await tarball.extract("./output-dir");
console.log(`成功提取 ${fileCount} 个文件`);
支持 Gzip 压缩(含自定义压缩级别),适用于本地文件、S3 存储等多种场景。
🧠 新增 Bun.JSONC.parse():原生支持带注释的 JSON
配置文件如 tsconfig.json 或 VS Code 设置常使用 JSONC(带注释的 JSON)。现在 Bun 原生支持解析这类格式:
ts
const config = Bun.JSONC.parse(`
{
// 数据库配置
"host": "localhost",
"port": 5432,
"options": {
"ssl": true, // 允许尾随逗号
},
}
`);
console.log(config.host); // "localhost"
支持:
- 单行注释
// - 块注释
/* */ - 对象/数组末尾的逗号
告别第三方库,轻松读取配置!
📊 Bun.build() 新增 metafile 选项:深度分析打包结果
现在 Bun.build() 支持 metafile: true,输出与 esbuild 兼容的元数据文件,便于进行 bundle 体积分析、依赖可视化等。
ts
const result = await Bun.build({
entrypoints: ["./src/index.ts"],
outdir: "./dist",
metafile: true,
});
// 打印各文件大小
for (const [path, meta] of Object.entries(result.metafile.inputs)) {
console.log(`${path}: ${meta.bytes} 字节`);
}
// 保存供外部工具使用
await Bun.write("./dist/meta.json", JSON.stringify(result.metafile));
CLI 使用方式:
bash
bun build ./src/index.ts --outdir ./dist --metafile ./dist/meta.json
🧪 Bun.build() 支持 files 选项:虚拟文件注入
你可以在构建时动态注入内存中的虚拟文件,覆盖磁盘上的同名文件,非常适合注入构建常量、生成代码或 mock 模块:
ts
await Bun.build({
entrypoints: ["./src/index.ts"],
files: {
// 注入构建信息
"./src/generated.ts": `
export const BUILD_ID = "${crypto.randomUUID()}";
export const BUILD_TIME = ${Date.now()};
`,
// 覆盖配置
"./src/config.ts": `
export const API_URL = "https://api.production.com";
export const DEBUG = false;
`,
},
outdir: "./dist",
});
虚拟文件可与真实文件互相引用,灵活性极强。
⚡ 性能全面提升
Bun v1.3.6 在多个关键路径上实现了显著性能优化:
Response.json()快 3.5 倍 :现在与手动JSON.stringify() + new Response()性能持平。async/await快 15% ,Promise.race()快 30%(基于 JavaScriptCore 引擎改进)。Buffer.indexOf()和.includes()快 2 倍:启用 SIMD 指令加速大缓冲区搜索。Bun.hash.crc32()快 20 倍:利用 CPU 硬件 CRC32 指令(x86 PCLMULQDQ / ARM CRC32)。- 跨进程 JSON IPC 快 9 倍(大消息场景)。
- Linux ARM64 上
Bun.spawnSync()修复后快 30 倍。
🧪 测试体验升级
-
bun test新增--grep标志 :作为--test-name-pattern的别名,兼容 Jest/Mocha 用户习惯。bashbun test --grep "should handle user login" -
Fake Timers 兼容
@testing-library/react:修复因假定时器导致的测试卡死问题,现在user.click()可正常工作。
🗄️ 数据库与云服务增强
-
SQL
INSERT助手尊重undefined:传入undefined的字段将被完全忽略 (而非转为NULL),让数据库使用DEFAULT值。tsawait sql`INSERT INTO users ${sql({ name: "Alice", role: undefined })}`; // 生成: INSERT INTO users (name) VALUES ($1) -
S3 客户端支持 Requester Pays 桶 :
tsconst file = s3.file("data.csv", { bucket: "public-dataset", requestPayer: true, });
🌐 网络能力扩展
-
WebSocket 支持 HTTP/HTTPS 代理 :
tsnew WebSocket("wss://api.example.com", { proxy: "http://user:pass@proxy.corp:8080", });支持 Basic 认证、自定义代理头及完整 TLS 配置。
🛠️ 构建与开发体验
-
Bun.build()新增reactFastRefresh选项 :启用 React Fast Refresh HMR,无需插件。tsawait Bun.build({ reactFastRefresh: true, entrypoints: ["App.tsx"] }); -
--compile-executable-pathCLI 标志 :允许在bun build --compile时指定本地 Bun 可执行文件路径,适用于离线或定制构建环境。
💾 其他更新
- SQLite 升级至 3.51.2:包含多项稳定性与 WAL 模式改进。
console.log使用%j格式更快:得益于内部 JSON 序列化优化。
Bun v1.3.6 再次展现了其"全栈 JavaScript 运行时"的强大能力------从构建、测试到部署、云集成,一切尽在掌握。立即升级体验吧!
安装/升级命令:
bashcurl -fsSL https://bun.sh/install | bash # 或 bun upgrade
本文基于 Bun 官方博客 v1.3.6 整理,仅包含新增功能,已排除 Bug 修复内容。