在 JavaScript 生态系统中,Bun 正迅速崛起,成为 Node.js 的有力竞争者。作为一个现代化的 JavaScript 运行时,Bun 不仅提供了极致的性能,还致力于简化开发流程,提升开发者的生产力。
Bun 1.2 的发布标志着这一目标的又一重大进展,带来了 Node.js 兼容性的大幅提升、内置的 S3 对象存储支持、Postgres 客户端等重磅功能。无论是构建全栈应用、优化现有项目,还是探索新的开发范式,Bun 1.2 都为开发者提供了更强大的工具和更高效的解决方案。
接下来,让我们一起深入探索 Bun 1.2 的主要更新和亮点功能。
Node.js 兼容性
Bun 旨在成为 Node.js 的直接替代品。在 Bun 1.2 中,Bun 开始对每个更改运行 Node.js 测试套件,以确保兼容性。自那时起,已经修复了数千个错误,以下 Node.js 模块现在在 Bun 中通过了超过 90% 的测试:
node:http
node:fs
node:path
node:child_process
node:crypto
如何衡量兼容性?
在 Bun 1.2 中,测试和提升 Bun 与 Node.js 兼容性的方式发生了变化。以前,Bun 会优先修复用户报告的 Node.js 错误,通常是通过 GitHub 问题反馈的 npm 包无法在 Bun 中运行的问题。虽然这解决了实际用户遇到的错误,但这种方式更像是"打地鼠",难以实现 100% 的 Node.js 兼容性。
于是,Bun 团队决定直接运行 Node.js 的测试套件。Node.js 的测试套件包含数千个测试文件,Bun 团队通过替换内部绑定和调整错误消息等方式,逐步将这些测试移植到 Bun 中。
目前的进展
Bun 已经移植了数千个 Node.js 测试文件,并确保每次提交都会运行 Node.js 测试套件。每天都有更多的测试通过,Bun 团队对 Node.js 兼容性的进展感到非常兴奋。
S3 支持:Bun.s3
Bun 1.2 引入了内置的 S3 对象存储 API:Bun.s3
。通过这个 API,开发者可以轻松地从 S3 存储桶中读取、写入和删除文件,且 API 设计与 Web 标准兼容。
从 S3 读取文件
ini
import { s3 } from "bun";
const file = s3.file("folder/my-file.txt");
const content = await file.text();
写入文件到 S3
javascript
import { s3 } from "bun";
const file = s3.file("folder/my-file.txt");
await file.write("hello s3!");
预签名 URL
Bun 还支持生成预签名 URL,允许用户直接上传文件到 S3,而无需通过服务器中转。
javascript
import { s3 } from "bun";
const url = s3.presign("folder/my-file.txt", {
expiresIn: 3600, // 1 小时
acl: "public-read",
});
Postgres 支持:Bun.sql
Bun 1.2 还引入了内置的 Postgres 客户端:Bun.sql
。通过这个客户端,开发者可以轻松地执行 SQL 查询,并使用 JavaScript 值作为参数。
javascript
import { sql } from "bun";
const users = await sql`
SELECT name, age FROM users
WHERE age >= ${65}
`;
Bun.sql 的性能比 Node.js 中最流行的 Postgres 客户端快 50%,并且支持自动预处理语句、查询管道化等优化。
更快的 Express
在 Bun 1.2 中,Express 框架的性能提升了 3 倍。这得益于 Bun 对 node:http
的兼容性改进以及 HTTP 服务器的优化。
新的文本锁文件:bun.lock
Bun 1.2 引入了新的文本锁文件 bun.lock
,取代了之前的二进制锁文件 bun.lockb
。新的锁文件采用 JSONC 格式,支持注释和尾随逗号,使得在 GitHub 上查看差异和解决合并冲突变得更加容易。
perl
{
"lockfileVersion": 0,
"packages": [
["express@4.21.2", "sha512-..."],
["body-parser@1.20.3"]
]
}
其他改进
- JSONC 支持 :现在可以在
package.json
中使用注释和尾随逗号。 - npmrc 支持 :Bun 现在支持读取
.npmrc
文件,用于配置 npm 注册表和范围包。 - bun run --filter:可以在多个工作区中同时运行脚本。
- bun outdated:查看过时的依赖项。
- bun publish:发布 npm 包。
总结
Bun 1.2 带来了许多令人兴奋的新功能和改进,特别是在 Node.js 兼容性、S3 支持和 Postgres 客户端方面。无论是构建全栈应用还是优化现有项目,Bun 都提供了强大的工具和性能优势。
如果你还没有尝试过 Bun,现在是一个绝佳的时机。立即安装 Bun,体验这些新功能吧!
arduino
curl -fsSL https://bun.sh/install | bash
如果你已经安装了 Bun,可以通过以下命令升级到最新版本:
bun upgrade
Bun 的未来充满无限可能,期待你的加入!