Bun v1.3 重磅发布:一站式全栈 JS 运行时,前端开发、数据库、Redis 全内置
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
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
2025 年 NestJS 仍值得后端开发者投入吗?深度解析其持久竞争力
2025 年 NestJS 仍值得后端开发者投入吗?深度解析其持久竞争力 在 JavaScript 后端框架层出不穷的 2025 年,NestJS 依旧是企业级应用开发领域的无冕之王。自 2017 年首次发布以来,这款基于 Node.js 的框架不仅顶住了 Express、Koa 等 “前辈” 的压力,还成功抵御了 Fastify、Adonis 等 “后起之秀” 的冲击 —— 如今其 GitHub 星标数已突破 6 万,跻身全球 Top 5 后端框架行列。 为何 NestJS 能打破前端框架 “三年一轮回” 的魔咒?2025 年选择它,又有哪些不可替代的理由?本文将从架构、TypeScript 支持、生态等维度展开深度解析。 一、架构理念:从 “混乱自由” 到 “结构化优雅” NestJS 的核心竞争力,在于彻底解决了 Node.js 后端开发中的 “架构失控” 问题。早期的 Express 虽灵活,但缺乏内置架构标准,导致团队协作时代码风格千差万别。以 “用户登录” 功能为例,一个 Express 项目可能出现 10 种不同的实现方式: // Express中常见的混乱写法 app....
-
下一篇
更高效的数据处理解决方案:基于 MinIO 部署 Apache Doris 存算分离版本实践
引言 现代数据处理在多维度面临严峻挑战,一方面,数据量的持续增长致使传统存储成本居高不下,非结构化数据所占比例日益攀升,进一步加重了存储负担,且数据质量问题推高了存储和清洗成本;另一方面,企业内部往往存在多套系统,数据难以集成,这对数据分析的成本和时效性也提出了更高的要求。 Apache Doris 作为一款具备高性能的实时分析数据库,拥有湖仓一体的能力。当它与 MinIO 这样高性能且 S3 兼容的对象存储系统相结合时,能够构建出一个高效且具备低成本特性的数据分析系统。本文将介绍基于 Apache Doris 和 MinIO 的存算分离部署教程与使用实践。 为什么选择 Apache Doris 和 MinIO Apache Doris 是一款基于 MPP 架构的高性能、实时分析型数据库。它以高效、简单和统一的特性著称,能够在亚秒级的时间内返回海量数据的查询结果。Doris 具备以下优势: 高性能:在海量数据下实现亚秒级查询响应,支持高并发点查询和复杂分析。 实时分析:支持实时数据导入和查询,适合需要即时洞察的业务场景。 易用性:设计简单,操作和维护成本低。 可扩展性:通过 MPP 架...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- MySQL数据库中FOR UPDATE的使用
- Red5直播服务器,属于Java语言的直播服务器
- Mario游戏-低调大师作品
- Docker容器配置,解决镜像无法拉取问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程

微信收款码
支付宝收款码