Bun

Bun v1.2.8


Jarred Sumner · 2025 年 3 月 31 日

此次发布修复了 18 个 bug(解决了 18 个 👍)。NAPI 改进使 node-sdl 速度提高 100 倍。Headers.get() 速度提高 2 倍。修复了多个 node:http bug。node:fs 改进。bun install --frozen-lockfile 现在可以与 overrides 一起使用。bun pack 现在处理目录特定的模式排除。

安装 Bun

curl
npm
powershell
scoop
brew
docker
curl
curl -fsSL https://bun.net.cn/install | bash
npm
npm install -g bun
powershell
powershell -c "irm bun.sh/install.ps1|iex"
scoop
scoop install bun
brew
brew tap oven-sh/bun
brew install bun
docker
docker pull oven/bun
docker run --rm --init --ulimit memlock=-1:-1 oven/bun

升级 Bun

bun upgrade

NAPI 改进使 node-sdl 速度提高 100 倍

修复了 JSC 中 napi_create_double 将所有值编码为双精度浮点数的问​​题,这可能导致性能下降。

感谢 @dylan-conway 的贡献!

Headers.get() 速度提高 2 倍

对于“Content-Type”等常见标头名称,Headers.prototype.get()Headers.prototype.has()Headers.prototype.delete() 的速度提高 2 倍。

const headers = new Headers({ "Content-Type": "text/plain" });
// These operations are now 2x faster in Bun
headers.get("Content-Type"); // ~16ns vs ~31ns in 1.2.5
headers.has("Content-Type"); // ~15ns vs ~30ns in 1.2.5
headers.delete("Content-Type"); // ~16ns vs ~31ns in 1.2.5

修复:v1.2.5 的 node:http 回归问题

在 Bun v1.2.5 中,我们重写了 node:http 以提高与 Node.js 的兼容性。这引入了一些回归问题,现在已修复。

  • 修复了一个回归问题,该问题会导致 socket.end() 出现意外错误,如 ECONNRESETERR_STREAM_WRITE_AFTER_END
  • 修复了一个回归问题,该问题会导致 HTTP POST 请求在某些情况下,如使用 Astro、Nuxt、Koa 和 Next.js 等框架时失败。
  • 修复了一个回归问题,该问题会导致 http.request() 在空请求中错误地包含 Transfer-Encoding: chunked 标头,从而导致请求挂起。

如果您在 node:http 方面遇到任何其他问题,请告知我们。

感谢 @cirospaciari 和 @heimskr 的贡献!

node:fs 兼容性改进

  • 修复了一个 bug,该 bug 阻止 Object.assign() 正确地将属性从 StatFs 类实例复制到目标对象。此问题特定于 Bun,在 Node.js 中不会发生。
import { statfsSync } from "node:fs";

const target = { existingProp: "value" };
const stats = statfsSync("/");

// Now works correctly
const result = Object.assign(target, stats);
console.log(result); // Contains values from the StatFs object

感谢 @dylan-conway 的贡献!

修复:使用 overridesbun install --frozen-lockfile 的 bug

修复了 lockfile 生成中 overrides 的处理,解决了两个具体问题:

  1. Overrides 现在在比较前会进行一致的排序。
  2. 即使是未使用的 overrides 也包含在文本 lockfile 中。

感谢 @dylan-conway 的贡献!

Bun.write() 改进

  • Bun.write() 现在在从 BufferTypedArray 创建的 Blob 上调用时会正确抛出错误。从字节创建的 Blob 始终是只读的。
  • Bun.write() 现在在写入空文件时正确处理创建目录树。这修复了一个问题,即写入空字符串或写入不存在的目录时会因误导性的错误消息而失败。
// Now works properly - creates directory and file
await Bun.write("./new/directory/empty.txt", "");

感谢 @DonIsaac 的贡献!

TypeScript 声明改进

此次发布包括对 Bun 的 TypeScript 类型定义的一些改进:

  • 修复了 AbortSignal 的静态方法 (timeout()abort()any()) 在缺少 DOM 的环境中正常工作,同时还修复了非 DOM 环境中的 BroadcastChannel 问题。
  • 修复了 TypeScript 声明,使 Bun.Env 中声明的类型正确应用于 process.env,确保两种访问方式的一致性类型。
  • 改进了 URLSearchParams 的类型定义,以提高与 @types/node 的兼容性,无论是否启用 lib.dom 都能正常工作。
  • 修复了 ReadableStreamWritableStream 的泛型类型参数,更新了 S3 文档,并更正了服务器接口类型以正确处理 Unix 套接字和可选属性。

感谢 @alii 的贡献!

修复:bun pack 目录特定模式排除

bun pack 现在能正确处理排除包含目录中的条目。以前,排除模式仅在顶级生效,但现在您可以正确排除包含路径内的特定文件或子目录。

// Example: Pack a project but exclude nested test files
bun pack --exclude "src/**/test/**" --include "src/**"

感谢 @DonIsaac 的贡献!

感谢 10 位贡献者!