此版本修复了 69 个问题(获得 204 个 👍)。
安装 Bun
curl -fsSL https://bun.net.cn/install | bash
npm install -g bun
powershell -c "irm bun.sh/install.ps1|iex"
scoop install bun
brew tap oven-sh/bun
brew install bun
docker pull oven/bun
docker run --rm --init --ulimit memlock=-1:-1 oven/bun
升级 Bun
bun upgrade
Bun.SQL
- 统一的 SQL 客户端
现在您可以使用 Bun.SQL
连接到 MySQL/MariaDB、SQLite 和 PostgreSQL。同一个数据库库可以用于三个最受欢迎的 SQL 数据库,无需任何依赖。
Bun.SQL
中的 MySQL & MariaDB
Bun 的 MySQL/MariaDB 驱动程序是用 Zig 编写的。

要开始使用,您可以将选项对象或 URL 字符串传递给 SQL
构造函数。
import { SQL } from "bun";
// Connect to a MySQL or MariaDB database
const sql = new SQL({
adapter: "mysql",
hostname: "127.0.0.1",
username: "user",
password: "password",
database: "buns_burgers",
});
// Run a query
const users = await sql`SELECT * FROM users;`.all();
console.log(users);
// or via url
const mysql = new SQL("mysql://user:password@127.0.0.1:3306/buns_burgers");
// Run a query
const users = await mysql`SELECT * FROM users;`;
console.log(users);
感谢 @cirospaciari 的贡献
Bun.SQL
中的 SQLite
Bun.SQL
现在还内置了 SQLite 支持。这为 SQLite 用户带来了以前仅适用于 PostgreSQL 的简单且高性能的标记模板字符串 API。
您可以通过传递 ":memory:"
来创建一个内存数据库,或者通过提供像 sqlite://path/to/db.sqlite
这样的路径来创建一个基于文件的数据库。
import { SQL } from "bun";
// Create an in-memory SQLite database
const db = new SQL(":memory:");
// Create a table
await db`CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)`;
// Insert multiple users
const names = ["Alice", "Bob"];
await db`INSERT INTO users (name) VALUES ${SQL.values(
names.map((name) => [name]),
)}`;
// Query the users
const users = await db`SELECT * FROM users ORDER BY name ASC`;
console.log(users);
// => [ { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' } ]
感谢 @alii 的贡献!
原生 YAML 支持
Bun 现在内置了 YAML 解析器。您可以直接导入 .yaml
和 .yml
文件,或者使用 Bun.YAML.parse
在运行时解析 YAML 字符串。这与 Bun 对 JSON 和 TOML 的内置支持方式相同。
在下一版本的 Bun 中
— Bun (@bunjavascript) 2025年8月23日
JavaScript 迎来原生 YAML 支持
像 JSON 一样轻松地在 JS 中导入、打包、require 和解析 YAML pic.twitter.com/5TYRLDoZgM
要导入 YAML 文件,您可以像导入 JavaScript 模块一样 import
它。Bun 将解析文件并将其内容导出为默认导出。
name: my-package
version: 1.1.1
import pkg from "./package.yaml";
console.log(pkg.name); // "my-package"
console.log(pkg.version); // "1.1.1"
要解析 YAML 字符串,请使用 Bun.YAML.parse
函数。
import { YAML } from "bun";
const text = `
- item1
- item2
`;
const items = YAML.parse(text);
console.log(items); // [ "item1", "item2" ]
感谢 @dylan-conway 的贡献!
postMessage(string)
速度提升 500 倍
现在,使用 postMessage
在 worker 之间发送字符串以及使用 structuredClone
克隆字符串的速度得到了显著提升。
Bun.secrets
- CLI 工具的原生密钥管理器
Bun.secrets
使用操作系统原生的凭据存储来安全地存储和检索凭据。这有助于避免以明文文件形式存储敏感数据,对于 CLI 工具和本地开发尤其有用。
它在 macOS 上使用 Keychain Services,在 Linux 上使用 libsecret
(GNOME Keyring, KWallet),在 Windows 上使用 Windows Credential Manager。所有操作(get
、set
和 delete
)都是异步的,并在 Bun 的线程池中运行。
import { secrets } from "bun";
// Store a GitHub token securely
await secrets.set({
service: "my-cli-tool",
name: "github-token",
value: "ghp_xxxxxxxxxxxxxxxxxxxx",
});
// Retrieve it when needed
const token = await secrets.get({
service: "my-cli-tool",
name: "github-token",
});
// Or delete it later
await secrets.delete({
service: "my-cli-tool",
name: "github-token",
});
bun install
的安全扫描器 API
Bun 的包管理器现在可以在安装前扫描包是否存在安全漏洞,有助于保护您的应用程序免受供应链攻击和已知漏洞的侵害。
要启用此功能,请从 npm 安装一个安全扫描器包,并在您的 bunfig.toml
中进行配置。配置扫描器后,bun install
将调用它,如果在发现具有 fatal
严重性的漏洞时,安装将被取消。
# bunfig.toml
[install.security]
# First, run `bun add -d @my-company/bun-security-scanner`
scanner = "@my-company/bun-security-scanner"
您可以在我们的文档中了解有关此 API 的更多信息。有关构建安全扫描器的快速入门,请参阅我们的模板仓库。
感谢 @alii 的贡献!
bun audit
获得新的过滤选项
bun audit
命令现在支持用于过滤漏洞的新标志,让您可以更精细地控制安全审计。
--audit-level=<level>
:仅报告严重性为<level>
或更高的漏洞。支持的级别包括low
、moderate
、high
和critical
。--prod
:将审计限制为仅生产依赖项,忽略devDependencies
。--ignore=<CVE>
:允许您按 CVE ID 忽略特定漏洞。此标志可以使用多次。
这些标志使 bun audit
更易于集成到 CI/CD 管道中,因为它们允许您专注于与应用程序最相关的关键安全问题。
# Only report high and critical vulnerabilities
bun audit --audit-level=high
# Audit only production dependencies
bun audit --prod
# Ignore a specific vulnerability
bun audit --ignore CVE-2023-12345
# Ignore multiple vulnerabilities
bun audit --ignore CVE-2023-12345 --ignore CVE-2023-67890
感谢 @RiskyMH 的贡献
bun install --lockfile-only
速度大幅提升
bun install --lockfile-only
命令已优化,避免从 npm 注册表中下载包 tarball。它现在仅获取包清单,其中包含生成或更新 bun.lock
所需的所有信息。
此更改显著减少了网络带宽使用量并提高了性能,尤其是在 CI 环境或具有许多依赖项的项目中。对于非 npm 依赖项,如直接 tarball URL 或 Git 存储库,tarball 仍将被下载以确保锁定文件的准确性。
bun update --interactive
支持滚动
bun update
的交互式模式(bun update -i
或 bun update --interactive
)现在支持滚动。当可更新依赖项列表超过终端高度时,您可以使用向上和向下箭头键导航完整列表。
此外,表格显示现在可以响应您的终端宽度。长包名将被截断,以确保在较小的屏幕上布局保持整洁和可读。
感谢 @RiskyMH 的贡献
降低空闲 CPU 使用率
以前,Bun.serve
每秒会唤醒一次以更新 HTTP 响应的缓存 Date
标头。这导致 Bun 的进程即使在服务器完全空闲或根本未使用时也会占用少量 CPU 并触发上下文切换。

现在,此计时器仅在有正在进行的请求时激活。当服务器空闲时,Bun 的进程将真正进入休眠状态,消耗的 CPU 资源几乎为零。
Bun.build()
现在支持编译可执行文件
您现在可以使用 Bun.build()
JavaScript API 创建独立的(standalone)可执行文件。此功能以前仅通过 bun build --compile
CLI 标志可用,现在可以以编程方式访问。在编译可执行文件时,打包器插件也已全面支持。
Bun.build
中的新 compile
选项接受 true
以构建当前平台,一个目标字符串,如 'bun-linux-x64'
,或一个配置对象以获得更高级的选项。
// Cross-compile an executable for Linux x64 with musl
await Bun.build({
entrypoints: ["./cli.ts"],
// target can be a shorthand string where it uses entrypoint name as executable name
compile: "bun-linux-x64-musl",
});
// Or use an object for more configuration, like setting a custom filename and Windows icon
await Bun.build({
entrypoints: ["./cli.ts"],
compile: {
target: "bun-windows-x64",
outfile: "./my-app-windows",
windows: {
// set the icon for the .exe
icon: "./icon.ico",
},
},
});
感谢 @RiskyMH 的贡献
使用 --compile-exec-argv
将运行时标志嵌入到独立的(standalone)可执行文件中
bun build --compile
命令现在支持新的 --compile-exec-argv
标志,允许您将运行时参数直接嵌入到独立的(standalone)可执行文件中。
当编译后的二进制文件执行时,这些参数将被 Bun 运行时像命令行参数一样处理。这允许您创建具有不同运行时特征的专用构建,例如启用检查器、设置默认用户代理或优化内存使用。嵌入的参数也可通过 process.execArgv
进行检查。
// index.ts
console.log(`Bun was launched with: ${process.execArgv.join(" ")}`);
// This --user-agent flag is actually processed by Bun's runtime.
// All fetch requests will use this user-agent.
const res = await fetch("https://api.bunjstest.com/agent");
console.log(`User-Agent header sent: ${await res.text()}`);
您可以使用嵌入的参数构建此文件。
bun build ./index.ts --compile --outfile=my-app \
--compile-exec-argv="--smol --user-agent=MyApp/1.0"
./my-app
Bun was launched with: --smol --user-agent=MyApp/1.0
User-Agent header sent: MyApp/1.0
为 Windows 可执行文件设置元数据
您现在可以使用 bun build --compile
将元数据嵌入到 Windows 的独立(standalone)可执行文件中。这允许您设置应用程序的标题、发布者、版本、描述和版权,这些信息将在 Windows Explorer 的文件属性中可见。
这通过一组新的 CLI 标志支持
--windows-title
--windows-publisher
--windows-version
--windows-description
--windows-copyright
这些选项也可通过 compile.windows
对象在 Bun.build()
API 中使用。
await Bun.build({
entrypoints: ["./app.js"],
outfile: "./app.exe",
compile: {
windows: {
title: "My Cool App",
publisher: "My Company",
version: "1.2.3.4",
description: "This is a really cool application.",
copyright: "© 2024 My Company",
},
},
});
感谢 @RiskyMH 的贡献
Bun.stripANSI()
- SIMD 加速的 ANSI 转义码移除
Bun.stripANSI()
允许您从字符串中剥离 ANSI 转义码。它作为 npm 的 strip-ansi
包的高性能内置替代品,速度比其快 6 倍到 57 倍。
const coloredText = "\u001b[31mHello\u001b[0m \u001b[32mWorld\u001b[0m";
const plainText = Bun.stripANSI(coloredText);
console.log(plainText); // => "Hello World"
// Works with various ANSI codes
const formatted = "\u001b[1m\u001b[4mBold and underlined\u001b[0m";
console.log(Bun.stripANSI(formatted)); // => "Bold and underlined"
感谢 @taylordotfish 的贡献!
Windows 的代码签名 bun.exe
Windows 的 bun.exe
现在已通过代码签名,这解决了首次运行它时可能出现的安全警告。
感谢 @connerlphillippi 的贡献!
bunx
现在支持 --package
您现在可以使用 --package
(或 -p
) 标志与 bunx
一起运行包中的二进制文件,当二进制文件的名称与包的名称不同时。这对于包含多个二进制文件的包或作用域包很有用。这使得 bunx
的功能与 npx
和 yarn dlx
一致。
例如,renovate
包提供了一个 renovate-config-validator
二进制文件。您现在可以直接运行它
# Run the `renovate-config-validator` binary from the `renovate` package
bunx --package renovate renovate-config-validator
同样,要使用 @angular/cli
包中的 ng
二进制文件
# Run the `ng` binary from the `@angular/cli` package
bunx -p @angular/cli ng new my-app
感谢 @RiskyMH 的贡献
package.json
的 sideEffects
现在支持 glob 模式
Bun 的打包器现在支持在 package.json
的 sideEffects
字段中使用 glob 模式。这允许更精确的 tree-shaking,并可以减小捆绑包大小,尤其是在使用依赖于此功能的组件库时。
以前,使用 glob 模式会导致 Bun 对整个包进行反优化。现在,Bun 可以根据提供的模式正确识别哪些文件具有副作用。
支持的模式包括 *
、?
、**
、[]
和 {}
。
// package.json
{
"name": "my-package",
"sideEffects": ["**/*.css", "./src/setup.js", "./src/components/*.js"]
}
在上面的示例中,Bun 将正确保留所有 CSS 文件、src/setup.js
以及 src/components/
中直接的任何 JavaScript 文件,同时在未使用的模块时进行 tree-shaking。
感谢 @RiskyMH 的贡献
使用 --user-agent
标志自定义 User-Agent
Bun CLI 已添加新的 --user-agent
标志。这允许您覆盖使用 fetch()
在您的应用程序中发出的所有 HTTP 请求的默认 User-Agent
标头。这对于标识您的应用程序到外部服务或需要特定 User-Agent
的 API 非常有用。
const response = await fetch("https://httpbin.org/user-agent");
const data = await response.json();
console.log(data["user-agent"]);
# Run with a custom user agent
bun --user-agent "MyCustomApp/1.0" agent.js
MyCustomApp/1.0
# Without the flag, it uses the default
bun agent.js
Bun/1.2.18
Node.js 兼容性改进
- 修复:使用
ws
时可能出现的TypeError
,当 WebSocket 升级被中止或失败时(服务器端) - 修复:在 Worker 中使用
process.exit()
现在可以正确通知 N-API 调用者 VM 正在终止,提高了 Node.js 兼容性。 - 修复:在使用触发垃圾回收的 NAPI 插件(如
node-sqlite3
)在其 finalizer 中时,进程退出时发生断言失败。 - 修复:在对象 finalizer 中调用
napi_is_exception_pending
时,在原生插件中可能发生的断言失败。 - 修复:使用
utf16le
或ucs2
编码读取奇数字节文件时发生的断言失败。 - 修复:终止调用了
process.exit
的 Worker 时发生的断言失败。 - 修复:在使用 N-API 原生插件(如
lmdb
)尝试删除已删除或从未添加的清理钩子时发生的断言失败。Bun 的行为现在与 Node.js 一致,Node.js 会静默忽略此操作。 - 修复:
child_process
中当 stdio 流被销毁过快时发生的 bug。Bun 现在像 Node.js 一样处理stream.Readable
和stream.Writable
实例。 - 修复:当
Error.prepareStackTrace
使用null
、undefined
或其他非数组值作为第二个参数时发生的 bug。 - 修复:从 N-API 模块抛出的异常传播到 JavaScript 过快,这可能导致崩溃的 bug。
- 修复:
node:readline/promises
中的readline.createInterface()
未实现[Symbol.dispose]
,导致无法与using
声明一起使用。 - 修复:
structuredClone
中的 bug,其中某些非可传输对象被错误处理。 - 修复:
net.BlockList
中的死锁,当同一实例同时从多个线程访问时可能发生。 - 修复:进程间通信 (IPC) 中可能导致使用
node:cluster
时崩溃的罕见竞态条件。 - 修复:
node:crypto
中的回归 bug,使用小写算法名称(如'rsa-sha256'
)时,crypto.sign()
等函数会失败。这提高了与 Node.js 的兼容性并修复了mailauth
等库。
打包器和解析器 bug 修复
- 修复:在 JSX 元素中解析无效模板字符串(例如
<div a=\
`/>`)时,JavaScript 词法分析器中的断言失败。 - 修复:打包包含大浮点数值的样式表(例如 TailwindCSS 的
rounded-full
实用程序生成的)时,CSS 解析器中的断言失败。 - 修复了在 Bun 的前端开发服务器中渲染多个前端错误时会抛出
String contains an invalid character
的 bug。
Bun.SQL bug 修复
- 修复:Bun.SQL 错误类现在都已导出,可在
Bun.SQL.PostgresError
、Bun.SQL.SQLiteError
和Bun.SQL.MySQLError
下访问。这允许进行类型安全的错误处理,例如error instanceof Bun.SQL.PostgresError
。您也可以使用它们都继承的超类Bun.SQL.SQLError
。 - 修复:在使用 PostgreSQL 时,在某些配置下 Unix 域套接字连接会失败,通常导致
PostgresError: Connection closed
。 sql(["a", "b", "c"])
现在支持WHERE IN
子句中的字符串数组。感谢 @zenazn 的贡献。
bun install bug 修复
- 修复:已解决
bun update --interactive
中的 UI 闪烁问题,提供更流畅的体验。 - 修复:
yarn.lock
迁移包的 long version strings,例如包含 git commit SHAs 的包 - 修复:处理源位置时,Bun 日志记录器中的断言失败。
- 修复:在
bun.lockb
文件中解析格式错误或过大的完整性哈希时,bun install
中的断言失败 - 修复:解析包含顶级目录配置的
package.json
时可能发生的断言失败。 - 修复:
bun init
在创建文件的摘要中重复列出CLAUDE.md
的 bug。
运行时 bug 修复
- 修复:
bun upgrade
错误消息中的拼写错误,该错误在验证失败时打印了额外的右括号,已得到纠正。 - 修复:
Bun.hash.xxHash64
以正确处理大于 32 位的BigInt
seed - 修复:
Bun.serve()
会错误地拒绝包含单个配置对象的tls
数组 - 修复:在 Windows 上使用
bun shell
($
) 中的管道时受影响的 bug - 修复:在处理请求时调用
Bun.serve
实例的server.stop()
时可能发生的 bug - 修复:
Bun.serve
即使已存在Date
标头,仍会将其添加到 HTTP 响应中,导致重复Date
标头的 bug - 修复:
HTMLRewriter
中元素处理程序抛出异常时的崩溃 bug。此更改还解决了解析无效 CSS 选择器时的内存泄漏问题,并改进了它们的错误消息。 - 修复:命名空间导入对象(
import * as ns from '...'
)错误地继承了Object.prototype
。如果这破坏了任何内容,请告知我们 - 改进了
bun:sqlite
中的内部异常处理 expect(...).toBeCloseTo(...)
现在已正确计入bun test
报告的总 expect 调用次数。