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

相关推荐
whisperrr.1 小时前
【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?
前端·ajax·json
烂蜻蜓2 小时前
前端已死?什么是前端
开发语言·前端·javascript·vue.js·uni-app
Rowrey3 小时前
react+typescript,初始化与项目配置
javascript·react.js·typescript
谢尔登3 小时前
Vue 和 React 的异同点
前端·vue.js·react.js
祈澈菇凉8 小时前
Webpack的基本功能有哪些
前端·javascript·vue.js
小纯洁w8 小时前
Webpack 的 require.context 和 Vite 的 import.meta.glob 的详细介绍和使用
前端·webpack·node.js
想睡好8 小时前
css文本属性
前端·css
qianmoQ9 小时前
第三章:组件开发实战 - 第五节 - Tailwind CSS 响应式导航栏实现
前端·css
记得早睡~9 小时前
leetcode150-逆波兰表达式求值
javascript·算法·leetcode
zhoupenghui1689 小时前
golang时间相关函数总结
服务器·前端·golang·time