找回密码
 立即注册
首页 业界区 业界 Bun v1.3 重磅发布:一站式全栈 JS 运行时,前端开发、 ...

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

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

1.png

Bun v1.3 堪称迄今为止最大规模的更新 —— 它将 Bun 从 “高性能 JS 运行时” 升级为 “一站式全栈开发解决方案”,不仅原生支持前端开发全流程(热重载、打包构建),还新增了 MySQL 客户端、Redis 客户端等企业级工具,同时大幅提升 Node.js 兼容性。本文将带你全面拆解 Bun v1.3 的核心特性,以及它如何改变全栈开发流程。
一、快速上手:多平台安装命令

首先附上各系统的安装命令,国内开发者可直接复制使用(支持 Windows/macOS/Linux,Docker 也可快速部署):
  1. # 1. Linux/macOS 通用(curl)
  2. curl -fsSL https://bun.sh/install | bash
  3. # 2. Windows(PowerShell)
  4. powershell -c "irm bun.sh/install.ps1 | iex"
  5. # 3. npm 全局安装(适合已装Node的环境)
  6. npm install -g bun
  7. # 4. macOS(Homebrew)
  8. brew tap oven-sh/bun
  9. brew install bun
  10. # 5. Docker(快速测试,无需本地安装)
  11. docker pull oven/bun
  12. 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 文件并生成路由:
  1. # 运行当前目录及子目录下所有HTML文件
  2. bun './**/*.html'
复制代码
执行后输出如下,直接访问 http://localhost:3000 即可开发:
  1. Bun v1.3 ready in 6.62 ms
  2. → http://localhost:3000/
  3. Routes:
  4. └─ / → ./index.html
  5. └─ /dashboard → ./dashboard.html
  6. 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 自定义热重载逻辑:
  1. // React组件中使用热重载(自动触发Fast Refresh)
  2. if (import.meta.hot) {
  3.   import.meta.hot.accept((newModule) => {
  4.     // 自定义更新逻辑
  5.     console.log("组件热更新完成");
  6.   });
  7. }
复制代码
(3)生产环境构建

开发完成后,用 bun build --production 一键打包,自动压缩代码、优化资源:
  1. # 打包index.html及关联的JS/CSS,输出到dist目录
  2. bun build ./index.html --production --outdir=dist
复制代码
(4)快速初始化项目

支持通过模板快速创建项目,包含 React、React+Tailwind、React+shadcn 等常见组合:
  1. # 交互式选择模板
  2. bun init
  3. # 直接创建React项目
  4. bun init --react
  5. # 创建React+Tailwind项目
  6. bun init --react=tailwind
  7. # 创建React+shadcn UI项目
  8. bun init --react=shadcn
复制代码
企业案例:Midjourney 已采用 Bun 进行前端开发,可见其生产环境稳定性。
2.全栈开发:前后端同服,简化 CORS 与路由

Bun v1.3 解决了全栈开发的核心痛点 —— 前端和后端可运行在同一个服务进程中,无需处理跨域(CORS)问题,且路由系统统一支持前端页面与后端 API。
(1)前后端同服示例

通过 Bun.serve() 同时托管前端 HTML 和后端 API,代码如下:
  1. // 导入前端页面(HTML文件可直接作为模块导入)
  2. import homepage from "./index.html";
  3. import dashboard from "./dashboard.html";
  4. import { serve, sql } from "bun";
  5. serve({
  6.   // 开发环境配置:启用热重载+浏览器日志回传
  7.   development: {
  8.     hmr: true, // 热重载
  9.     console: true, // 浏览器控制台日志会同步到终端
  10.   },
  11.   // 统一路由:前端页面与API共存
  12.   routes: {
  13.     // 前端路由:/ 对应index.html,/dashboard对应dashboard.html
  14.     "/": homepage,
  15.     "/dashboard": dashboard,
  16.     // 后端API:/api/users 支持GET/POST
  17.     "/api/users": {
  18.       GET: async () => {
  19.         // 直接用Bun内置SQL客户端查询数据库(下文详解)
  20.         const users = await sql`SELECT * FROM users LIMIT 10`;
  21.         return Response.json(users);
  22.       },
  23.       POST: async (req) => {
  24.         const { name, email } = await req.json();
  25.         const [newUser] = await sql`
  26.           INSERT INTO users ${sql({ name, email })}
  27.           RETURNING *; // 插入后返回新用户数据
  28.         `;
  29.         return Response.json(newUser);
  30.       },
  31.     },
  32.     // 动态路由:/api/users/:id (支持参数提取)
  33.     "/api/users/:id": async (req) => {
  34.       const { id } = req.params; // 自动提取路由参数
  35.       const [user] = await sql`SELECT * FROM users WHERE id = ${id} LIMIT 1`;
  36.       if (!user) return new Response("用户不存在", { status: 404 });
  37.       return Response.json(user);
  38.     },
  39.     // 健康检查接口
  40.     "/healthcheck.json": Response.json({ status: "ok" }),
  41.   },
  42. });
复制代码
核心优势:无需配置 Nginx 反向代理,前后端请求走同一端口,彻底消除 CORS 问题。
(2)编译为独立可执行文件

Bun 可将全栈应用打包成单个可执行文件,方便部署(支持 Windows/macOS/Linux):
  1. # 编译全栈应用为独立 executable(以index.html为入口)
  2. 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:
  1. import { sql, SQL } from "bun";
  2. // 1. 连接PostgreSQL
  3. const postgresDB = new SQL("postgres://user:pass@localhost:5432/mydb");
  4. // 2. 连接MySQL/MariaDB
  5. const mysqlDB = new SQL("mysql://user:pass@localhost:3306/mydb");
  6. // 3. 连接SQLite(本地文件)
  7. const sqliteDB = new SQL("sqlite://./data.db");
  8. // 4. 默认连接(读取环境变量DATABASE_URL)
  9. const defaultDB = sql; // 自动读取process.env.DATABASE_URL
复制代码
(2)SQL 查询示例

支持参数化查询(自动防 SQL 注入),语法简洁:
  1. // 1. 基础查询(参数用${}传递)
  2. const seniorAge = 65;
  3. const seniorUsers = await sql`
  4.   SELECT name, age FROM users
  5.   WHERE age >= ${seniorAge}
  6. `;
  7. // 2. 插入数据(用sql()简化对象格式)
  8. const newUser = { name: "Alice", email: "alice@example.com" };
  9. await sql`INSERT INTO users ${sql(newUser)}`;
  10. // 3. PostgreSQL数组操作(新增sql.array helper)
  11. await sql`
  12.   INSERT INTO users (name, roles)
  13.   VALUES (${"Bob"}, ${sql.array(["admin", "user"], "TEXT")}) // 指定数组类型为TEXT
  14. `;
  15. // 4. 多语句查询(适合数据库迁移)
  16. await sql`
  17.   CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT);
  18.   CREATE INDEX idx_users_name ON users(name);
  19.   INSERT INTO users (name) VALUES ('Admin');
  20. `.simple(); // 启用简单查询协议,支持多语句
复制代码
(3)PostgreSQL 增强特性

针对 PostgreSQL 做了深度优化,支持 Unix 域套接字、动态列操作、数组类型等:
  1. // 1. 通过Unix域套接字连接(比TCP快30%)
  2. const unixDB = new SQL({
  3.   path: "/tmp/.s.PGSQL.5432", // 套接字路径
  4.   user: "postgres",
  5.   database: "mydb",
  6. });
  7. // 2. 动态更新指定列(只更新name和email字段)
  8. const updates = { name: "Alice Smith", email: "alice@smith.com", age: 30 };
  9. await sql`
  10.   UPDATE users SET ${sql(updates, "name", "email")} // 仅更新前两个字段
  11.   WHERE id = ${123}
  12. `;
  13. // 3. 数组类型查询(正确保留null值)
  14. const result = await sql`SELECT ARRAY[0, 1, NULL]::integer[]`;
  15. 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 简洁直观:
  1. import { redis, RedisClient } from "bun";
  2. // 1. 基础操作(set/get)
  3. await redis.set("username", "alice");
  4. const username = await redis.get("username");
  5. console.log(username); // "alice"
  6. // 2. 查看过期时间(ttl)
  7. console.log(await redis.ttl("username")); // -1(无过期时间)
  8. // 3. 自定义客户端(指定连接地址)
  9. const myRedis = new RedisClient("redis://:password@localhost:6379/0");
  10. await myRedis.hset("user:123", "name", "Bob", "age", "30"); // Hash操作
  11. const user = await myRedis.hgetall("user:123");
  12. console.log(user); // { name: "Bob", age: "30" }
复制代码
(2)Pub/Sub 消息订阅

原生支持 Redis 发布订阅,自动处理连接重连:
  1. import { RedisClient } from "bun";
  2. // 订阅者(需单独创建客户端,Redis订阅者不能发布消息)
  3. const subscriber = new RedisClient("redis://localhost:6379");
  4. // 发布者(复制订阅者连接)
  5. const publisher = await subscriber.duplicate();
  6. // 订阅"notifications"频道
  7. await subscriber.subscribe("notifications", (message, channel) => {
  8.   console.log(`收到消息:${message}(频道:${channel})`);
  9. });
  10. // 发布消息
  11. await publisher.publish("notifications", "Bun Redis客户端测试");
复制代码
(3)后续规划

官方表示将在后续版本中支持 Redis 集群、流(Streams)和 Lua 脚本。

  • 其他核心升级
(1)WebSocket 优化


  • 自动消息压缩:支持 permessage-deflate 扩展,JSON 类消息体积可减少 60%-80%;
  • 子协议协商:符合 RFC 6455 标准,可指定客户端支持的子协议;
  • 自定义头信息:允许覆盖 Host、Sec-WebSocket-Key 等特殊头,适配代理场景。
示例代码:
  1. // 带压缩和自定义头的WebSocket客户端
  2. const ws = new WebSocket("wss://example.com", {
  3.   headers: { "User-Agent": "Bun-Client/1.3" },
  4.   perMessageDeflate: true, // 启用压缩
  5. });
  6. ws.onopen = () => {
  7.   console.log("WebSocket连接成功,扩展:", ws.extensions); // "permessage-deflate"
  8. };
复制代码
(2)包管理增强

Bun 的包管理器在 v1.3 中新增依赖目录(catalog)隔离安装安全扫描等功能,尤其适合单体仓库(monorepo):

  • catalog 统一版本:在根目录 package.json 定义依赖版本,所有子包复用,避免版本冲突;
  • 隔离安装:默认启用,子包只能访问自己声明的依赖,解决 “隐式依赖” 问题;
  • 安全扫描 API:支持集成第三方安全工具(如 Socket),安装前检测漏洞;
  • 交互式更新:bun update --interactive 可选择要更新的依赖,避免批量更新导致的兼容问题。
示例:catalog 配置(根目录 package.json)
  1. {
  2.   "name": "monorepo",
  3.   "workspaces": ["packages/*"],
  4.   "catalog": { // 统一依赖版本
  5.     "react": "^18.3.1",
  6.     "typescript": "^5.5.0"
  7.   }
  8. }
复制代码
子包引用 catalog 版本:
  1. {
  2.   "name": "@myapp/ui",
  3.   "dependencies": {
  4.     "react": "catalog:" // 自动使用根目录catalog中的react版本
  5.   }
  6. }
复制代码
(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

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册