Bun 1.3 正式发布
2025年10月10日,高性能 JavaScript 运行时 Bun 发布了 1.3 版本。这是 Bun 项目迄今为止最重大的版本更新,标志着 Bun 从单纯的运行时工具演变为一个功能完备的全栈 JavaScript 开发平台。
从运行时到全栈平台的跨越
Bun 1.3 的核心突破在于将前端开发能力深度整合进运行时。据官方介绍,此次更新新增了对前端开发的一级支持,开发者现在可以直接运行 HTML 文件,无需额外配置即可启动一个功能完整的开发服务器。
bun ./**/*.html
执行上述命令后,Bun 会自动识别项目中的 HTML 文件并启动开发服务器,包括热模块替换(HMR)、React Fast Refresh 等现代前端开发必备功能。这种「开箱即用」的设计理念贯穿整个 1.3 版本。
值得注意的是,Bun 的开发服务器并非简单的静态文件服务器,而是集成了原生的 JavaScript、CSS 和 HTML 转译与打包能力。这意味着开发者可以在同一个进程中同时处理前后端代码,从根本上解决了传统开发中前后端端口分离导致的 CORS 跨域问题。
内置数据库客户端:性能与便利的平衡
数据库访问是后端开发的核心需求。Bun 1.3 将内置数据库支持从单一的 PostgreSQL 扩展到 MySQL、MariaDB 和 SQLite,并提供了统一的 Bun.SQL
API。这一设计大幅降低了项目的依赖复杂度,同时带来显著的性能提升。
import { sql, SQL } from "bun";
// 使用统一 API 连接不同数据库
const postgres = new SQL("postgres://localhost/mydb");
const mysql = new SQL("mysql://localhost/mydb");
const sqlite = new SQL("sqlite://data.db");
// 自动从环境变量读取连接信息
const seniorAge = 65;
const seniorUsers = await sql`
SELECT name, age FROM users
WHERE age >= ${seniorAge}
`;
虽然现有的 npm 包如 postgres
和 mysql2
在 Bun 中已有不错的性能表现,但原生实现带来的优势不容小觑。官方数据显示,内置客户端在某些场景下性能提升可达数倍。
新版本还新增了 Redis 客户端支持,官方基准测试显示其性能是流行的 ioredis 库的 7.9 倍以上。对于需要缓存和消息队列的应用场景,这一改进意义重大。
路由系统:简化全栈应用架构
Bun 1.3 为 Bun.serve()
引入了内置路由系统,支持参数化路由和通配符,让开发者能够在同一服务中优雅地处理前端页面和后端 API。
import { serve, sql } from "bun";
import App from "./myReactSPA.html";
serve({
port: 3000,
routes: {
"/*": App,
"/api/users": {
GET: async () => Response.json(await sql`SELECT * FROM users LIMIT 10`),
POST: async (req) => {
const { name, email } = await req.json();
const [user] = await sql`
INSERT INTO users ${sql({ name, email })}
RETURNING *;
`;
return Response.json(user);
},
},
"/api/users/:id": async (req) => {
const { id } = req.params;
const [user] = await sql`SELECT * FROM users WHERE id = ${id} LIMIT 1`;
if (!user) return new Response("User not found", { status: 404 });
return Response.json(user);
},
},
});
这种设计让全栈应用的部署变得极为简单。更令人印象深刻的是,Bun 的打包器现在支持将前后端代码打包成单一的可执行文件:
bun build --compile ./index.html --outfile myapp
生成的可执行文件可以在任何地方运行,无需安装 Node.js 或其他依赖,这对于微服务部署和边缘计算场景具有重要价值。
Cookie 管理:告别第三方库
Web 应用中的 Cookie 处理一直是个痛点。开发者要么选择单一功能的 tough-cookie
库,要么被迫引入 Express、Elysia 等完整框架。Bun 1.3 提供了原生的 Cookie API,采用类似 Map 的接口设计:
import { serve, randomUUIDv7 } from "bun";
serve({
routes: {
"/api/users/sign-in": (request) => {
request.cookies.set("sessionId", randomUUIDv7(), {
httpOnly: true,
sameSite: "strict",
});
return new Response("Signed in");
},
"/api/users/sign-out": (request) => {
request.cookies.delete("sessionId");
return new Response("Signed out");
},
},
});
这个 API 的巧妙之处在于零性能开销的延迟解析——只有在实际访问 request.cookies
时才会解析请求头中的 Cookie,避免了不必要的计算。
包管理器的重大革新
Bun 的包管理器在 1.3 版本中获得了多项企业级特性。其中最值得关注的是隔离安装模式成为工作空间的默认行为。这一改变解决了大型 monorepo 项目中最常见的问题之一:包的幽灵依赖(phantom dependencies)。
在传统的提升安装模式下,所有依赖都平铺在根目录的 node_modules
中,包可能意外访问到未在 package.json
中声明的依赖。隔离模式确保每个包只能访问其明确声明的依赖,提高了构建的可预测性和可靠性。
依赖目录 (Catalogs) 功能为 monorepo 中的版本管理提供了优雅的解决方案:
{
"name": "monorepo",
"workspaces": ["packages/*"],
"catalog": {
"react": "^18.0.0",
"typescript": "^5.0.0"
}
}
工作空间包可以通过 "react": "catalog:"
引用目录中的版本,实现集中式版本管理。这一设计借鉴了 pnpm 的成功经验,但整合得更加自然。
新增的安全扫描 API 让企业能够在安装阶段拦截恶意包。Bun 团队与 Socket 安全公司合作,推出了官方安全扫描器 @socketsecurity/bun-security-scanner
。开发者也可以基于公开的 API 编写自定义扫描器,满足特定的安全合规需求。
[install.security]
scanner = "@socketsecurity/bun-security-scanner"
最小发布时间限制功能则提供了对供应链攻击的防护:
[install]
minimumReleaseAge = 604800 # 7天
这项配置要求包必须发布至少指定时间后才允许安装,给社区留出时间识别潜在的恶意包。
交互式更新命令 bun update --interactive
让依赖升级变得可控:
bun update --interactive
开发者可以逐个选择要更新的包,而不是一次性升级所有依赖,从而更好地控制潜在的破坏性变更。
测试框架的成熟化
Bun 的测试运行器在 1.3 版本中获得了与 VS Code Test Explorer 的深度集成。开发者可以直接在编辑器侧边栏查看测试列表,一键运行或调试单个测试,内联查看错误信息。这种开发体验与 Jest + VS Code Jest 扩展相当,但得益于 Bun 的性能优势,测试执行速度更快。
并发测试支持的加入让 I/O 密集型测试套件的运行时间大幅缩短:
import { test } from "bun:test";
test.concurrent("fetch user 1", async () => {
const res = await fetch("https://api.example.com/users/1");
expect(res.status).toBe(200);
});
describe.concurrent("server tests", () => {
test("sends a request to server 1", async () => {
const response = await fetch("https://example.com/server-1");
expect(response.status).toBe(200);
});
});
默认情况下,最多 20 个测试会并发运行,这个数字可以通过 --max-concurrency
标志调整。对于需要保持串行执行的测试,可以使用 test.serial
修饰符。
类型测试功能 expectTypeOf()
的引入是另一个亮点。开发者现在可以在单元测试中直接验证 TypeScript 类型:
import { expectTypeOf, test } from "bun:test";
test("types are correct", () => {
expectTypeOf<string>().toEqualTypeOf<string>();
expectTypeOf({ foo: 1 }).toHaveProperty("foo");
expectTypeOf<Promise<number>>().resolves.toBeNumber();
});
这些类型断言可以通过 bunx tsc --noEmit
在 CI 流程中验证,将类型安全检查提升到了新的高度。
Node.js 兼容性的持续推进
Bun 1.3 在每次提交时运行 Node.js 测试套件中额外的 800 个测试用例。官方数据显示,N-API 测试通过率已达 98% 以上,timers 模块通过率达到 98.4%。
对 node:vm
模块的全面支持是本次更新的重要成果。这个模块常用于代码沙箱、插件系统等高级场景,其实现难度较大。Bun 1.3 不仅支持基础的 vm.Script
,还实现了 vm.SourceTextModule
、vm.SyntheticModule
等高级 API,并支持字节码缓存以提升编译性能。
import vm from "node:vm";
const script = new vm.Script('console.log("Hello from VM")');
script.runInThisContext();
node:test
模块的初步支持让使用 Node.js 原生测试框架的项目能够在 Bun 上运行,这对于生态系统的兼容性意义重大。
加密性能的提升令人瞩目。DiffieHellman 和 Cipheriv/Decipheriv 的速度提升了约 400 倍,scrypt 提升了 6 倍。这些改进通过将关键路径用原生 C++ 重写实现,大幅降低了密码学操作的开销。
Web 标准与现代 API
Bun 1.3 新增了对多项 Web 标准的支持。YAML 原生支持让配置文件处理变得简单:
import { YAML } from "bun";
const obj = YAML.parse("key: value");
const yaml = YAML.stringify({ key: "value" }, 0, 2);
// 直接导入 YAML 文件
import config from "./config.yaml";
官方实现的 YAML 解析器目前通过了官方测试套件的 90% 用例,性能表现优异。
WebSocket 压缩功能的自动协商是另一个实用特性。当连接支持 permessage-deflate
时,Bun 会自动启用压缩,对于 JSON 等结构化数据,压缩率可达 60-80%,显著减少带宽消耗。
Zstandard 压缩的全面支持包括 fetch()
的自动解压和手动压缩 API:
import { zstdCompress, zstdDecompress } from "bun";
const compressed = await zstdCompress("Hello, world!");
const decompressed = await zstdDecompress(compressed);
DisposableStack
和 AsyncDisposableStack
的实现体现了 Bun 对 TC39 提案的快速跟进。这些 API 与 using
和 await using
声明配合,提供了优雅的资源管理机制。
性能优化:细节见真章
Bun 1.3 的性能优化遍布各个层面。空闲 CPU 占用的降低源于对垃圾回收调度的优化,在没有进行中的请求时,Bun.serve
的计时器不再活跃。JavaScript 内存占用降低 10-30% (Next.js 应用降低 28%,Elysia 降低 11%) 归功于更智能的 GC 计时器调度。
I/O 线程池的优化让 macOS 上的 Bun.build
快了 60%。Express 性能提升 9%,Fastify 提升 5.4%,这些改进来自对 node:http
模块的持续优化。
postMessage
的性能提升尤为惊人——字符串传递快了 500 倍,简单对象快了 240 倍。这通过避免对安全共享的字符串进行序列化实现,同时减少了约 22 倍的峰值内存使用。
// 在 Worker 间传递大型 JSON 字符串现在快了 500 倍
const response = await fetch("https://api.example.com/data");
const json = await response.text();
postMessage(json);
启动时间减少了 1ms,内存占用减少了 3MB,这些看似微小的优化累积起来,对用户体验产生显著影响。
开发者体验的精心打磨
Bun 1.3 在开发者体验上的改进同样值得称道。TypeScript 默认配置改为 "module": "Preserve"
,保留模块语法的原始形态,更符合 Bun 作为原生 ES 模块运行时的定位。
console.log()
的深度控制让调试大型对象变得可控:
bun --console-depth=5 ./app.ts
[console]
depth = 5
BUN_OPTIONS
环境变量提供了设置默认 CLI 参数的便捷方式:
export BUN_OPTIONS="--watch --hot"
bun run ./app.ts
# 等同于: bun --watch --hot run ./app.ts
bunx --package
标志让运行二进制文件与包名不一致的包变得简单:
bunx --package=@typescript-eslint/parser eslint ./src
新增的 bun why
命令清晰地展示依赖链,解答「为什么这个包会出现在我的项目中」:
bun why tailwindcss
这些看似细小的改进,体现了 Bun 团队对开发者日常工作流程的深刻理解。
打包器与构建系统的增强
Bun 的打包器在 1.3 版本中获得了跨平台编译能力。开发者现在可以在任何平台上为 Windows、macOS 和 Linux 构建可执行文件:
bun build --compile --target=linux-x64 ./app.ts --outfile myapp-linux
bun build --compile --target=darwin-arm64 ./app.ts --outfile myapp-macos
bun build --compile --target=windows-x64 ./app.ts --outfile myapp.exe
Windows 可执行文件元数据的支持让企业应用的打包更加专业:
bun build --compile --target=windows-x64 \\
--title="My App" \\
--publisher="My Company" \\
--version="1.0.0" \\
./app.ts
代码签名支持(Windows 的 Authenticode 和 macOS 的 codesign)确保了发布的可执行文件可以通过操作系统的安全验证。
压缩器变得更加智能,能够移除未使用的函数和类名,优化 new Object()
、new Array()
等表达式,消除无用的 try...catch...finally
块。这些优化让生产构建的体积进一步缩小。
安全性的持续关注
Bun 1.3 引入了 Bun.secrets
API,利用操作系统的原生凭据存储(macOS 的 Keychain、Linux 的 libsecret、Windows 的 Credential Manager):
import { secrets } from "bun";
await secrets.set({
service: "my-app",
name: "api-key",
value: "secret-value",
});
const key = await secrets.get({
service: "my-app",
name: "api-key",
});
凭据在静态时被加密,与环境变量分离存储,提供了更高的安全保障。
Bun.CSRF
模块为跨站请求伪造防护提供了原生支持:
import { CSRF } from "bun";
const secret = "your-secret-key";
const token = CSRF.generate({ secret, encoding: "hex", expiresIn: 60 * 1000 });
const isValid = CSRF.verify(token, { secret });
这些安全特性的内置化降低了开发者的心智负担,让安全最佳实践更容易落地。
生态系统的影响与展望
Bun 1.3 的发布标志着该项目从「快速运行时」向「完整开发平台」的战略转型。Midjourney 等知名公司已在生产环境中使用 Bun 进行前端开发,这证明了其稳定性和可靠性。
官方提到,每个提交都会运行大量的 Node.js 测试套件,表明 Bun 团队对兼容性的重视。对 pnpm.lock
和 yarn.lock
的迁移支持,让团队可以无痛试用 Bun,而无需说服所有成员同时升级工具链。
不过,1.3 版本也带来了一些破坏性变更。Bun.serve()
的 TypeScript 类型被重构,WebSocket 数据定义方式发生变化;SQL 客户端现在强制使用标签模板语法;测试过滤器在没有匹配用例时会报错而非静默成功。这些变更虽然可能给现有项目带来迁移成本,但从长远看有利于 API 的一致性和可维护性。
数据说话:性能对比
根据官方提供的基准测试数据:
- Redis 客户端: 比 ioredis 快 7.9 倍以上
- postMessage 字符串: 速度提升 500 倍,内存减少 22 倍
- postMessage 对象: 速度提升 240 倍
- DiffieHellman: 约快 400 倍
- Cipheriv/Decipheriv: 约快 400 倍
- scrypt: 快 6 倍
AbortSignal.timeout
: 快 40 倍Headers
操作: 快 2 倍Bun.build
on macOS: 快 60%- Express: 快 9%
- Fastify: 快 5.4%
这些数据展示了 Bun 在性能上的持续领先优势。
社区反响与未来规划
Bun 1.3 的发布在社区引发了热烈讨论。开发者们尤其关注全栈开发能力的提升和包管理器的企业级特性。Socket 公司 CTO Ahmad Nassri 对安全扫描 API 的评价颇具代表性:「Bun 团队行动迅速,在包管理器层面保护开发者。开放安全扫描 API,让 Socket 这样的工具能够在安装过程中提供实时威胁检测。这是让开源开发默认更安全的重要一步。」
官方表示,1.3 系列将持续关注全栈应用开发体验的提升。Redis 集群、流式处理和 Lua 脚本支持已在规划中。WebAssembly 流式编译的实现,以及对更多 TC39 提案的支持,也在进行中。
Bun 的快速迭代和对社区反馈的积极响应,让人对其未来发展充满期待。从一个「更快的 Node.js」到一个「完整的 JavaScript 平台」,Bun 正在书写属于自己的故事。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
知鱼 v1.4.0 发布,项目管理系统
知鱼项目管理系统1.4.0版本发布了,主要增加了甘特图功能,具体功能如下: 一、甘特图 增加工时导入功能,可通过甘特图方式查看项目任务进度 二、任务看板功能 任务看板增加了两侧任务栏的收起和展开功能,更方便界面的浏览 增加了任务启动时的开始时间和结束时间设置 三、其他 bug 修复: 修复项目任务未开始时进度显示错误问题 修复了知识库等一些权限问题 修复了任务详情页面的权限问题 功能预览 其他下载方式: https://www.zhiyupm.com/downloads/ 安装使用: https://www.zhiyupm.com/wiki/ 详情查看:https://gitee.com/wy-soft/zhiyu/releases/v1.4.0
-
下一篇
团结引擎 1.7.1 preview 发布
团结引擎 1.7.1 preview 已发布!本次技术更新涵盖渲染(Rendering)、实时动态全局光照系统(TuanjieGI)、团结粒子系统(Particle System)、团结动画系统(Animation)、ShaderGraph、Content Pipeline、 小游戏(MiniGame) 以及 Platform 几大方向。 渲染(Rendering) 在1.7.1 preview 版本中做了如下更新: 虚拟几何体功能支持通用渲染管线(URP): 在 Tuanjie 1.7.1 preview 中,虚拟几何体功能进一步拓展了对团结引擎已有渲染管线的支持。重新设计模型的导入设置 UI,为开发者带来更优的模型导入使用体验。优化虚拟几何体执行效率,提升渲染性能。 虚拟几何体功能现已支持团结引擎的通用渲染管线(URP),为其带来了同屏实时流畅渲染上亿三角形的能力。 使用虚拟几何体的渲染方式优化阴影绘制过程,使用 GPU 剔除,以 Multi View 的方式绘制光源所有的 Cascade,大幅减少阴影绘制所需的 Draw Call 数量。 进一步优化虚拟几何体的 CPU 和 GP...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Crontab安装和使用
- CentOS8编译安装MySQL8.0.19
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程