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

Bun v1.3 堪称迄今为止最大规模的更新 —— 它将 Bun 从 “高性能 JS 运行时” 升级为 “一站式全栈开发解决方案”,不仅原生支持前端开发全流程(热重载、打包构建),还新增了 MySQL 客户端、Redis 客户端等企业级工具,同时大幅提升 Node.js 兼容性。本文将带你全面拆解 Bun v1.3 的核心特性,以及它如何改变全栈开发流程。
一、快速上手:多平台安装命令
首先附上各系统的安装命令,国内开发者可直接复制使用(支持 Windows/macOS/Linux,Docker 也可快速部署):
# 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 文件并生成路由:
# 运行当前目录及子目录下所有HTML文件 bun './**/*.html'
执行后输出如下,直接访问 http://localhost:3000 即可开发:
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 自定义热重载逻辑:
// React组件中使用热重载(自动触发Fast Refresh) if (import.meta.hot) { import.meta.hot.accept((newModule) => { // 自定义更新逻辑 console.log("组件热更新完成"); }); }
(3)生产环境构建
开发完成后,用 bun build --production 一键打包,自动压缩代码、优化资源:
# 打包index.html及关联的JS/CSS,输出到dist目录 bun build ./index.html --production --outdir=dist
(4)快速初始化项目
支持通过模板快速创建项目,包含 React、React+Tailwind、React+shadcn 等常见组合:
# 交互式选择模板 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,代码如下:
// 导入前端页面(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):
# 编译全栈应用为独立 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:
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 注入),语法简洁:
// 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 域套接字、动态列操作、数组类型等:
// 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 简洁直观:
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 发布订阅,自动处理连接重连:
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 等特殊头,适配代理场景。
示例代码:
// 带压缩和自定义头的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)
{ "name": "monorepo", "workspaces": ["packages/*"], "catalog": { // 统一依赖版本 "react": "^18.3.1", "typescript": "^5.5.0" } }
子包引用 catalog 版本:
{ "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