Bun v1.3.6 发布:内置 Tarball 归档支持、JSONC 解析、Bundle 分析增强等重磅更新!

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 用户习惯。

    bash 复制代码
    bun test --grep "should handle user login"
  • Fake Timers 兼容 @testing-library/react :修复因假定时器导致的测试卡死问题,现在 user.click() 可正常工作。


🗄️ 数据库与云服务增强

  • SQL INSERT 助手尊重 undefined :传入 undefined 的字段将被完全忽略 (而非转为 NULL),让数据库使用 DEFAULT 值。

    ts 复制代码
    await sql`INSERT INTO users ${sql({ name: "Alice", role: undefined })}`;
    // 生成: INSERT INTO users (name) VALUES ($1)
  • S3 客户端支持 Requester Pays 桶

    ts 复制代码
    const file = s3.file("data.csv", {
      bucket: "public-dataset",
      requestPayer: true,
    });

🌐 网络能力扩展

  • WebSocket 支持 HTTP/HTTPS 代理

    ts 复制代码
    new WebSocket("wss://api.example.com", {
      proxy: "http://user:pass@proxy.corp:8080",
    });

    支持 Basic 认证、自定义代理头及完整 TLS 配置。


🛠️ 构建与开发体验

  • Bun.build() 新增 reactFastRefresh 选项 :启用 React Fast Refresh HMR,无需插件。

    ts 复制代码
    await Bun.build({ reactFastRefresh: true, entrypoints: ["App.tsx"] });
  • --compile-executable-path CLI 标志 :允许在 bun build --compile 时指定本地 Bun 可执行文件路径,适用于离线或定制构建环境。


💾 其他更新

  • SQLite 升级至 3.51.2:包含多项稳定性与 WAL 模式改进。
  • console.log 使用 %j 格式更快:得益于内部 JSON 序列化优化。

Bun v1.3.6 再次展现了其"全栈 JavaScript 运行时"的强大能力------从构建、测试到部署、云集成,一切尽在掌握。立即升级体验吧!

安装/升级命令:

bash 复制代码
curl -fsSL https://bun.sh/install | bash
# 或
bun upgrade

本文基于 Bun 官方博客 v1.3.6 整理,仅包含新增功能,已排除 Bug 修复内容。

相关推荐
奔跑的web.2 小时前
TypeScript Enum 类型入门:从基础到实战
前端·javascript·typescript
盐真卿2 小时前
python2
java·前端·javascript
kgduu4 小时前
js之表单
开发语言·前端·javascript
摘星编程5 小时前
React Native for OpenHarmony 实战:Picker 选择器组件详解
javascript·react native·react.js
摘星编程5 小时前
React Native for OpenHarmony 实战:VirtualizedList 虚拟化列表
javascript·react native·react.js
摘星编程6 小时前
React Native for OpenHarmony 实战:RefreshControl 下拉刷新组件
javascript·react native·react.js
鸣弦artha7 小时前
Flutter框架跨平台鸿蒙开发——Extension扩展方法
android·javascript·flutter
筱歌儿9 小时前
TinyMCE-----word表格图片进阶版
开发语言·javascript·word
Ama_tor10 小时前
obsidian进阶の插件系列|Templater从小白到菜鸟
javascript·markdown·插件·obsidian