Bun 1.2 版本重磅更新,带来全方位升级体验

在 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 的未来充满无限可能,期待你的加入!

相关推荐
橙某人9 分钟前
LogicFlow 插件魔改实录:手把手教你重写动态分组(DynamicGroup)🛠️
前端·javascript·vue.js
阿蔹18 分钟前
UI测试自动化-Web-Python-Selenium-2-元素操作、浏览器操作
前端·python·selenium·ui·自动化
2501_9444460026 分钟前
Flutter&OpenHarmony状态管理方案详解
开发语言·javascript·flutter
T_Donna31 分钟前
【问题解决】react native: cli.init is not a function
javascript·react native·react.js
谎言西西里38 分钟前
React hooks 之 一篇文章掌握 useState 和 useEffect 的核心机制
前端·react.js
qx0938 分钟前
html中使用vue3+elementplus
javascript·vue.js·html
Apifox.43 分钟前
Apifox 12 月更新| AI 生成用例同步生成测试数据、接口文档完整性检测、设计 SSE 流式接口、从 Git 仓库导入数据
前端·人工智能·git·ai·postman·团队开发
bjzhang751 小时前
使用 HTML + JavaScript 实现滑动验证码
前端·javascript·html
不老刘1 小时前
前端面试八股文:JavaScript 原型链
javascript·原型链
行走的陀螺仪1 小时前
使用uniapp,实现根据时间倒计时执行进度条变化
前端·javascript·uni-app·vue2·h5