Bun v1.3 堪稱迄今為止最大規(guī)模的更新 —— 它將 Bun 從 “高性能 JS 運行時” 升級為 “一站式全棧開發(fā)解決方案”,不僅原生支持前端開發(fā)全流程(熱重載、打包構建),還新增了 MySQL 客戶端、Redis 客戶端等企業(yè)級工具。
同時大幅提升 Node.js 兼容性。本文將帶你全面拆解 Bun v1.3 的核心特性,以及它如何改變全棧開發(fā)流程。
一、快速上手:多平臺安裝命令
首先附上各系統(tǒng)的安裝命令,國內開發(fā)者可直接復制使用(支持 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的環(huán)境)
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
 安裝完成后執(zhí)行 bun --version,顯示 1.3.x 即代表成功。
二、核心特性:從前端到后端的全棧支持
Bun v1.3 的核心升級是 “打通全棧開發(fā)鏈路”,以下是最值得關注的功能模塊:
1.前端開發(fā):原生支持熱重載與生產(chǎn)構建
Bun 不再需要依賴 Vite、Webpack 等工具 ——v1.3 內置了前端開發(fā)服務器,支持 HTML 直接運行、React 熱刷新(Fast Refresh),且性能遠超傳統(tǒng)工具(官方數(shù)據(jù)顯示,不少團隊已從 Vite 遷移到 Bun)。
(1)一鍵啟動前端服務
只需一行命令,Bun 會自動識別所有 HTML 文件并生成路由:
# 運行當前目錄及子目錄下所有HTML文件
bun './**/*.html'
執(zhí)行后輸出如下,直接訪問 http://localhost:3000 即可開發(fā):
Bun v1.3 ready in 6.62 ms
→ http://localhost:3000/
Routes:
└─ / → ./index.html
└─ /dashboard → ./dashboard.html
Press h + Enter to show shortcuts
注意:這不是靜態(tài)文件服務器 ——Bun 會自動調用原生 JS/CSS 轉譯器和打包器,處理 React、Vue 等框架代碼,無需額外配置。
(2)熱重載(HMR)與 React Fast Refresh
Bun 的熱重載基于原生系統(tǒng) API 實現(xiàn)(macOS 用 kqueue、Linux 用 inotify、Windows 用 ReadDirectoryChangesW),響應速度比 JS 實現(xiàn)快 10 倍以上??蚣荛_發(fā)者可通過 import.meta.hot API 自定義熱重載邏輯:
// React組件中使用熱重載(自動觸發(fā)Fast Refresh)
if (import.meta.hot) {
  import.meta.hot.accept((newModule) => {
    // 自定義更新邏輯
    console.log("組件熱更新完成");
  });
}
?
(3)生產(chǎn)環(huán)境構建
開發(fā)完成后,用 bun build --production 一鍵打包,自動壓縮代碼、優(yōu)化資源:
# 打包index.html及關聯(lián)的JS/CSS,輸出到dist目錄
bun build ./index.html --production --outdir=dist
(4)快速初始化項目
支持通過模板快速創(chuàng)建項目,包含 React、React+Tailwind、React+shadcn 等常見組合:
# 交互式選擇模板
bun init
# 直接創(chuàng)建React項目
bun init --react
# 創(chuàng)建React+Tailwind項目
bun init --react=tailwind
# 創(chuàng)建React+shadcn UI項目
bun init --react=shadcn
企業(yè)案例:Midjourney 已采用 Bun 進行前端開發(fā),可見其生產(chǎn)環(huán)境穩(wěn)定性。
2.全棧開發(fā):前后端同服,簡化 CORS 與路由
Bun v1.3 解決了全棧開發(fā)的核心痛點 —— 前端和后端可運行在同一個服務進程中,無需處理跨域(CORS)問題,且路由系統(tǒng)統(tǒng)一支持前端頁面與后端 API。
(1)前后端同服示例
通過 Bun.serve() 同時托管前端 HTML 和后端 API,代碼如下:
// 導入前端頁面(HTML文件可直接作為模塊導入)
import homepage from "./index.html";
import dashboard from "./dashboard.html";
import { serve, sql } from "bun";
serve({
  // 開發(fā)環(huán)境配置:啟用熱重載+瀏覽器日志回傳
  development: {
    hmr: true, // 熱重載
    console: true, // 瀏覽器控制臺日志會同步到終端
  },
  // 統(tǒng)一路由:前端頁面與API共存
  routes: {
    // 前端路由:/ 對應index.html,/dashboard對應dashboard.html
    "/": homepage,
    "/dashboard": dashboard,
    // 后端API:/api/users 支持GET/POST
    "/api/users": {
      GET: async () => {
        // 直接用Bun內置SQL客戶端查詢數(shù)據(jù)庫(下文詳解)
        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 *; // 插入后返回新用戶數(shù)據(jù)
        `;
        return Response.json(newUser);
      },
    },
    // 動態(tài)路由:/api/users/:id (支持參數(shù)提?。?/p>
    "/api/users/:id": async (req) => {
      const { id } = req.params; // 自動提取路由參數(shù)
      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" }),
  },
});
核心優(yōu)勢:無需配置 Nginx 反向代理,前后端請求走同一端口,徹底消除 CORS 問題。
(2)編譯為獨立可執(zhí)行文件
Bun 可將全棧應用打包成單個可執(zhí)行文件,方便部署(支持 Windows/macOS/Linux):
# 編譯全棧應用為獨立 executable(以index.html為入口)
bun build --compile ./index.html --outfile my-fullstack-app
性能數(shù)據(jù):官方測試顯示,編譯后的全棧 React 應用,服務響應速度比 Nginx 快 1.8 倍。
3.數(shù)據(jù)庫客戶端:MySQL/Postgres/SQLite 全內置
Bun v1.3 把 Bun.sql 從 “僅支持 Postgres” 升級為 “統(tǒng)一數(shù)據(jù)庫 API”,原生支持 MySQL、MariaDB、PostgreSQL 和 SQLite,零依賴且性能遠超第三方庫(如 mysql2、pg)。
(1)統(tǒng)一連接方式
無論使用哪種數(shù)據(jù)庫,連接方式完全一致,只需修改連接 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. 默認連接(讀取環(huán)境變量DATABASE_URL)
const defaultDB = sql; // 自動讀取process.env.DATABASE_URL
(2)SQL 查詢示例
支持參數(shù)化查詢(自動防 SQL 注入),語法簡潔:
// 1. 基礎查詢(參數(shù)用${}傳遞)
const seniorAge = 65;
const seniorUsers = await sql`
  SELECT name, age FROM users
  WHERE age >= ${seniorAge}
`;
// 2. 插入數(shù)據(jù)(用sql()簡化對象格式)
const newUser = { name: "Alice", email: "alice@example.com" };
await sql`INSERT INTO users ${sql(newUser)}`;
// 3. PostgreSQL數(shù)組操作(新增sql.array helper)
await sql`
  INSERT INTO users (name, roles)
  VALUES (${"Bob"}, ${sql.array(["admin", "user"], "TEXT")}) // 指定數(shù)組類型為TEXT
`;
// 4. 多語句查詢(適合數(shù)據(jù)庫遷移)
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(); // 啟用簡單查詢協(xié)議,支持多語句
(3)PostgreSQL 增強特性
針對 PostgreSQL 做了深度優(yōu)化,支持 Unix 域套接字、動態(tài)列操作、數(shù)組類型等:
// 1. 通過Unix域套接字連接(比TCP快30%)
const unixDB = new SQL({
  path: "/tmp/.s.PGSQL.5432", // 套接字路徑
  user: "postgres",
  database: "mydb",
});
// 2. 動態(tài)更新指定列(只更新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. 數(shù)組類型查詢(正確保留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 協(xié)議分支),性能測試顯示:單實例 Bun.redis.get 吞吐量達 250 萬次 / 秒,是 ioredis 的 7.9 倍,且內存占用僅為 ioredis 的 1/8。
(1)基礎使用
默認連接 localhost:6379 或讀取環(huán)境變量 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 發(fā)布訂閱,自動處理連接重連:
import { RedisClient } from "bun";
// 訂閱者(需單獨創(chuàng)建客戶端,Redis訂閱者不能發(fā)布消息)
const subscriber = new RedisClient("redis://localhost:6379");
// 發(fā)布者(復制訂閱者連接)
const publisher = await subscriber.duplicate();
// 訂閱"notifications"頻道
await subscriber.subscribe("notifications", (message, channel) => {
  console.log(`收到消息:${message}(頻道:${channel})`);
});
// 發(fā)布消息
await publisher.publish("notifications", "Bun Redis客戶端測試");
(3)后續(xù)規(guī)劃
官方表示將在后續(xù)版本中支持 Redis 集群、流(Streams)和 Lua 腳本。
- 其他核心升級 
(1)WebSocket 優(yōu)化
- 自動消息壓縮:支持 permessage-deflate 擴展,JSON 類消息體積可減少 60%-80%; 
- 子協(xié)議協(xié)商:符合 RFC 6455 標準,可指定客戶端支持的子協(xié)議; 
- 自定義頭信息:允許覆蓋 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 統(tǒng)一版本:在根目錄 package.json 定義依賴版本,所有子包復用,避免版本沖突; 
- 隔離安裝:默認啟用,子包只能訪問自己聲明的依賴,解決 “隱式依賴” 問題; 
- 安全掃描 API:支持集成第三方安全工具(如 Socket),安裝前檢測漏洞; 
- 交互式更新:bun update --interactive 可選擇要更新的依賴,避免批量更新導致的兼容問題。 
示例:catalog 配置(根目錄 package.json)
{
  "name": "monorepo",
  "workspaces": ["packages/*"],
  "catalog": { // 統(tǒng)一依賴版本
    "react": "^18.3.1",
    "typescript": "^5.5.0"
  }
}
?
子包引用 catalog 版本:
{
  "name": "@myapp/ui",
  "dependencies": {
    "react": "catalog:" // 自動使用根目錄catalog中的react版本
  }
}
?
(3)測試與調試
- VS Code 測試集成:安裝 Bun 插件后,測試用例可在 “測試資源管理器” 中可視化運行; 
- 并發(fā)測試:用 test.concurrent 實現(xiàn) IO 密集型測試并行執(zhí)行,速度提升 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 模塊編譯、字節(jié)碼緩存; 
- worker_threads 優(yōu)化:支持 environmentData 實現(xiàn)線程間數(shù)據(jù)共享。 
四、安全增強:加密存儲與 CSRF 防護
- Bun.secrets API:使用系統(tǒng)原生密鑰庫存儲敏感信息(macOS 用 Keychain、Linux 用 libsecret、Windows 用 Credential Manager),比環(huán)境變量更安全; 
- CSRF 防護:內置 Bun.CSRF 生成 / 驗證令牌,防止跨站請求偽造; 
- 加密性能提升:DiffieHellman 快 400 倍、Cipheriv 快 400 倍、scrypt 快 6 倍。 
五、總結:Bun v1.3 適合哪些場景?
- 全棧開發(fā)團隊:前后端同服簡化架構,減少跨域與部署復雜度; 
- 高性能需求場景:Redis、數(shù)據(jù)庫操作性能遠超傳統(tǒng)方案,適合高并發(fā)服務; 
- 前端工程化:替代 Vite/Webpack,熱重載更快、構建配置更簡單; 
- 企業(yè)級應用:安全特性(加密存儲、CSRF 防護)與兼容性(Node.js 模塊支持)滿足生產(chǎn)環(huán)境需求。 
如果你還在使用 “Node.js+Vite + 第三方數(shù)據(jù)庫庫” 的組合,不妨試試 Bun v1.3—— 它用一套工具鏈解決全棧開發(fā)的所有問題,大幅降低技術棧復雜度。
最后附上官方文檔地址:Bun 官方文檔,更多細節(jié)可參考官方指南。
參考文章:原文鏈接?
該文章在 2025/10/31 15:13:34 編輯過