Bun v1.3 重磅发布:一站式全栈 JS 运行时,前端开发、数据库、Redis 全内置

Bun v1.3 堪称迄今为止最大规模的更新 ------ 它将 Bun 从 "高性能 JS 运行时" 升级为 "一站式全栈开发解决方案",不仅原生支持前端开发全流程(热重载、打包构建),还新增了 MySQL 客户端、Redis 客户端等企业级工具,同时大幅提升 Node.js 兼容性。本文将带你全面拆解 Bun v1.3 的核心特性,以及它如何改变全栈开发流程。
一、快速上手:多平台安装命令
首先附上各系统的安装命令,国内开发者可直接复制使用(支持 Windows/macOS/Linux,Docker 也可快速部署):
tex
# 1. Linux/macOS 通用(curl)
curl -fsSL https://bun.sh/install | bash
# 2. Windows(PowerShell)
powershell -c "irm bun.sh/install.ps1 | iex"
# 3. npm 全局安装(适合已装Node的环境)
npm install -g bun
# 4. macOS(Homebrew)
brew tap oven-sh/bun
brew install bun
# 5. Docker(快速测试,无需本地安装)
docker pull oven/bun
docker run --rm --init --ulimit memlock=-1:-1 oven/bun
安装完成后执行 bun --version,显示 1.3.x 即代表成功。
二、核心特性:从前端到后端的全栈支持
Bun v1.3 的核心升级是 "打通全栈开发链路",以下是最值得关注的功能模块:
1.前端开发:原生支持热重载与生产构建
Bun 不再需要依赖 Vite、Webpack 等工具 ------v1.3 内置了前端开发服务器,支持 HTML 直接运行、React 热刷新(Fast Refresh),且性能远超传统工具(官方数据显示,不少团队已从 Vite 迁移到 Bun)。
(1)一键启动前端服务
只需一行命令,Bun 会自动识别所有 HTML 文件并生成路由:
Plain
# 运行当前目录及子目录下所有HTML文件
bun './**/*.html'
执行后输出如下,直接访问 http://localhost:3000 即可开发:
Plain
Bun v1.3 ready in 6.62 ms
→ http://localhost:3000/
Routes:
└─ / → ./index.html
└─ /dashboard → ./dashboard.html
Press h + Enter to show shortcuts
注意:这不是静态文件服务器 ------Bun 会自动调用原生 JS/CSS 转译器和打包器,处理 React、Vue 等框架代码,无需额外配置。
(2)热重载(HMR)与 React Fast Refresh
Bun 的热重载基于原生系统 API 实现(macOS 用 kqueue、Linux 用 inotify、Windows 用 ReadDirectoryChangesW),响应速度比 JS 实现快 10 倍以上。框架开发者可通过 import.meta.hot API 自定义热重载逻辑:
javascript
// React组件中使用热重载(自动触发Fast Refresh)
if (import.meta.hot) {
import.meta.hot.accept((newModule) => {
// 自定义更新逻辑
console.log("组件热更新完成");
});
}
(3)生产环境构建
开发完成后,用 bun build --production 一键打包,自动压缩代码、优化资源:
Plain
# 打包index.html及关联的JS/CSS,输出到dist目录
bun build ./index.html --production --outdir=dist
(4)快速初始化项目
支持通过模板快速创建项目,包含 React、React+Tailwind、React+shadcn 等常见组合:
Plain
# 交互式选择模板
bun init
# 直接创建React项目
bun init --react
# 创建React+Tailwind项目
bun init --react=tailwind
# 创建React+shadcn UI项目
bun init --react=shadcn
企业案例:Midjourney 已采用 Bun 进行前端开发,可见其生产环境稳定性。
2.全栈开发:前后端同服,简化 CORS 与路由
Bun v1.3 解决了全栈开发的核心痛点 ------ 前端和后端可运行在同一个服务进程中,无需处理跨域(CORS)问题,且路由系统统一支持前端页面与后端 API。
(1)前后端同服示例
通过 Bun.serve() 同时托管前端 HTML 和后端 API,代码如下:
javascript
// 导入前端页面(HTML文件可直接作为模块导入)
import homepage from "./index.html";
import dashboard from "./dashboard.html";
import { serve, sql } from "bun";
serve({
// 开发环境配置:启用热重载+浏览器日志回传
development: {
hmr: true, // 热重载
console: true, // 浏览器控制台日志会同步到终端
},
// 统一路由:前端页面与API共存
routes: {
// 前端路由:/ 对应index.html,/dashboard对应dashboard.html
"/": homepage,
"/dashboard": dashboard,
// 后端API:/api/users 支持GET/POST
"/api/users": {
GET: async () => {
// 直接用Bun内置SQL客户端查询数据库(下文详解)
const users = await sql`SELECT * FROM users LIMIT 10`;
return Response.json(users);
},
POST: async (req) => {
const { name, email } = await req.json();
const [newUser] = await sql`
INSERT INTO users ${sql({ name, email })}
RETURNING *; // 插入后返回新用户数据
`;
return Response.json(newUser);
},
},
// 动态路由:/api/users/:id (支持参数提取)
"/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("用户不存在", { status: 404 });
return Response.json(user);
},
// 健康检查接口
"/healthcheck.json": Response.json({ status: "ok" }),
},
});
核心优势:无需配置 Nginx 反向代理,前后端请求走同一端口,彻底消除 CORS 问题。
(2)编译为独立可执行文件
Bun 可将全栈应用打包成单个可执行文件,方便部署(支持 Windows/macOS/Linux):
Plain
# 编译全栈应用为独立 executable(以index.html为入口)
bun build --compile ./index.html --outfile my-fullstack-app
性能数据:官方测试显示,编译后的全栈 React 应用,服务响应速度比 Nginx 快 1.8 倍。
3.数据库客户端:MySQL/Postgres/SQLite 全内置
Bun v1.3 把 Bun.sql 从 "仅支持 Postgres" 升级为 "统一数据库 API",原生支持 MySQL、MariaDB、PostgreSQL 和 SQLite,零依赖且性能远超第三方库(如 mysql2、pg)。
(1)统一连接方式
无论使用哪种数据库,连接方式完全一致,只需修改连接 URL:
javascript
import { sql, SQL } from "bun";
// 1. 连接PostgreSQL
const postgresDB = new SQL("postgres://user:pass@localhost:5432/mydb");
// 2. 连接MySQL/MariaDB
const mysqlDB = new SQL("mysql://user:pass@localhost:3306/mydb");
// 3. 连接SQLite(本地文件)
const sqliteDB = new SQL("sqlite://./data.db");
// 4. 默认连接(读取环境变量DATABASE_URL)
const defaultDB = sql; // 自动读取process.env.DATABASE_URL
(2)SQL 查询示例
支持参数化查询(自动防 SQL 注入),语法简洁:
javascript
// 1. 基础查询(参数用${}传递)
const seniorAge = 65;
const seniorUsers = await sql`
SELECT name, age FROM users
WHERE age >= ${seniorAge}
`;
// 2. 插入数据(用sql()简化对象格式)
const newUser = { name: "Alice", email: "alice@example.com" };
await sql`INSERT INTO users ${sql(newUser)}`;
// 3. PostgreSQL数组操作(新增sql.array helper)
await sql`
INSERT INTO users (name, roles)
VALUES (${"Bob"}, ${sql.array(["admin", "user"], "TEXT")}) // 指定数组类型为TEXT
`;
// 4. 多语句查询(适合数据库迁移)
await sql`
CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT);
CREATE INDEX idx_users_name ON users(name);
INSERT INTO users (name) VALUES ('Admin');
`.simple(); // 启用简单查询协议,支持多语句
(3)PostgreSQL 增强特性
针对 PostgreSQL 做了深度优化,支持 Unix 域套接字、动态列操作、数组类型等:
postgresql
// 1. 通过Unix域套接字连接(比TCP快30%)
const unixDB = new SQL({
path: "/tmp/.s.PGSQL.5432", // 套接字路径
user: "postgres",
database: "mydb",
});
// 2. 动态更新指定列(只更新name和email字段)
const updates = { name: "Alice Smith", email: "alice@smith.com", age: 30 };
await sql`
UPDATE users SET ${sql(updates, "name", "email")} // 仅更新前两个字段
WHERE id = ${123}
`;
// 3. 数组类型查询(正确保留null值)
const result = await sql`SELECT ARRAY[0, 1, NULL]::integer[]`;
console.log(result[0].array); // [0, 1, null](v1.2及之前版本会丢失null)
4.内置 Redis 客户端:性能碾压 ioredis
Bun v1.3 新增原生 Redis 客户端,支持 Redis 和 Valkey(Redis 的 BSD 协议分支),性能测试显示:单实例 Bun.redis.get 吞吐量达 250 万次 / 秒,是 ioredis 的 7.9 倍,且内存占用仅为 ioredis 的 1/8。
(1)基础使用
默认连接 localhost:6379 或读取环境变量 REDIS_URL,API 简洁直观:
javascript
import { redis, RedisClient } from "bun";
// 1. 基础操作(set/get)
await redis.set("username", "alice");
const username = await redis.get("username");
console.log(username); // "alice"
// 2. 查看过期时间(ttl)
console.log(await redis.ttl("username")); // -1(无过期时间)
// 3. 自定义客户端(指定连接地址)
const myRedis = new RedisClient("redis://:password@localhost:6379/0");
await myRedis.hset("user:123", "name", "Bob", "age", "30"); // Hash操作
const user = await myRedis.hgetall("user:123");
console.log(user); // { name: "Bob", age: "30" }
(2)Pub/Sub 消息订阅
原生支持 Redis 发布订阅,自动处理连接重连:
javascript
import { RedisClient } from "bun";
// 订阅者(需单独创建客户端,Redis订阅者不能发布消息)
const subscriber = new RedisClient("redis://localhost:6379");
// 发布者(复制订阅者连接)
const publisher = await subscriber.duplicate();
// 订阅"notifications"频道
await subscriber.subscribe("notifications", (message, channel) => {
console.log(`收到消息:${message}(频道:${channel})`);
});
// 发布消息
await publisher.publish("notifications", "Bun Redis客户端测试");
(3)后续规划
官方表示将在后续版本中支持 Redis 集群、流(Streams)和 Lua 脚本。
- 其他核心升级
(1)WebSocket 优化
- 自动消息压缩:支持 permessage-deflate 扩展,JSON 类消息体积可减少 60%-80%;
- 子协议协商:符合 RFC 6455 标准,可指定客户端支持的子协议;
- 自定义头信息:允许覆盖 Host、Sec-WebSocket-Key 等特殊头,适配代理场景。
示例代码:
javascript
// 带压缩和自定义头的WebSocket客户端
const ws = new WebSocket("wss://example.com", {
headers: { "User-Agent": "Bun-Client/1.3" },
perMessageDeflate: true, // 启用压缩
});
ws.onopen = () => {
console.log("WebSocket连接成功,扩展:", ws.extensions); // "permessage-deflate"
};
(2)包管理增强
Bun 的包管理器在 v1.3 中新增依赖目录(catalog) 、隔离安装 、安全扫描等功能,尤其适合单体仓库(monorepo):
- catalog 统一版本:在根目录 package.json 定义依赖版本,所有子包复用,避免版本冲突;
- 隔离安装:默认启用,子包只能访问自己声明的依赖,解决 "隐式依赖" 问题;
- 安全扫描 API:支持集成第三方安全工具(如 Socket),安装前检测漏洞;
- 交互式更新:bun update --interactive 可选择要更新的依赖,避免批量更新导致的兼容问题。
示例:catalog 配置(根目录 package.json)
javascript
{
"name": "monorepo",
"workspaces": ["packages/*"],
"catalog": { // 统一依赖版本
"react": "^18.3.1",
"typescript": "^5.5.0"
}
}
子包引用 catalog 版本:
javascript
{
"name": "@myapp/ui",
"dependencies": {
"react": "catalog:" // 自动使用根目录catalog中的react版本
}
}
(3)测试与调试
- VS Code 测试集成:安装 Bun 插件后,测试用例可在 "测试资源管理器" 中可视化运行;
- 并发测试:用 test.concurrent 实现 IO 密集型测试并行执行,速度提升 5-10 倍;
- 类型测试:新增 expectTypeOf 断言,可在单元测试中验证 TypeScript 类型;
- 异步栈追踪:修复 JSCore 引擎的异步错误栈丢失问题,便于定位异步代码 bug。
三、Node.js 兼容性:支持更多核心模块
Bun v1.3 新增对 node:vm、node:test、worker_threads 等模块的支持,目前可运行的 Node.js 测试用例比 v1.2 多 800 个,兼容性大幅提升:
- node:test 支持:可直接运行 Node.js 风格的测试用例;
- node:vm 增强:支持 ECMAScript 模块编译、字节码缓存;
- worker_threads 优化:支持 environmentData 实现线程间数据共享。
四、安全增强:加密存储与 CSRF 防护
- Bun.secrets API:使用系统原生密钥库存储敏感信息(macOS 用 Keychain、Linux 用 libsecret、Windows 用 Credential Manager),比环境变量更安全;
- CSRF 防护:内置 Bun.CSRF 生成 / 验证令牌,防止跨站请求伪造;
- 加密性能提升:DiffieHellman 快 400 倍、Cipheriv 快 400 倍、scrypt 快 6 倍。
五、总结:Bun v1.3 适合哪些场景?
- 全栈开发团队:前后端同服简化架构,减少跨域与部署复杂度;
- 高性能需求场景:Redis、数据库操作性能远超传统方案,适合高并发服务;
- 前端工程化:替代 Vite/Webpack,热重载更快、构建配置更简单;
- 企业级应用:安全特性(加密存储、CSRF 防护)与兼容性(Node.js 模块支持)满足生产环境需求。
如果你还在使用 "Node.js+Vite + 第三方数据库库" 的组合,不妨试试 Bun v1.3------ 它用一套工具链解决全栈开发的所有问题,大幅降低技术栈复杂度。
最后附上官方文档地址:Bun 官方文档,更多细节可参考官方指南。
技术标签:#Bun #JavaScript #全栈开发 #Node.js #前端工程化 #数据库 #Redis