LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

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

zhenglin
2025年10月31日 15:5 本文热度 264

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. 其他核心升级

(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 适合哪些场景?

  1. 全栈开发团队:前后端同服简化架构,减少跨域与部署复杂度;

  2. 高性能需求场景:Redis、数据库操作性能远超传统方案,适合高并发服务;

  3. 前端工程化:替代 Vite/Webpack,热重载更快、构建配置更简单;

  4. 企业级应用:安全特性(加密存储、CSRF 防护)与兼容性(Node.js 模块支持)满足生产环境需求。

如果你还在使用 “Node.js+Vite + 第三方数据库库” 的组合,不妨试试 Bun v1.3—— 它用一套工具链解决全栈开发的所有问题,大幅降低技术栈复杂度。

最后附上官方文档地址:Bun 官方文档,更多细节可参考官方指南。


参考文章:原文链接


该文章在 2025/10/31 15:13:34 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved