Bun
總覽
Bun 是一個一站式的 JavaScript/TypeScript 執行環境,將 Node.js、npm、webpack 和 Jest 整合為單一二進位檔案。它提供原生 TypeScript 支援、高效能的 HTTP 伺服器 (Bun.serve())、快速的套件管理器、打包工具,以及與 Jest 相容的測試執行器,效能大幅提升。
使用說明
- 建立 HTTP 伺服器時,使用
Bun.serve(),它可處理 100K+ req/s,並內建 WebSocket 支援、TLS 和串流回應。 - 管理套件時,使用
bun install(比 npm 快 10-30 倍)、bun add、bun remove,並優先使用bun.lock(文字格式)以獲得可讀的 git diff。 - 打包時,使用
Bun.build()搭配適當的目標 ("browser"、"bun"、"node"),啟用splitting: true進行程式碼分割,並設定 tree shaking。 - 撰寫測試時,使用
bun test搭配與 Jest 相容的 API (describe、it、expect)、快照測試、使用mock.module()進行模擬,以及--coverage取得程式碼涵蓋率。 - 執行檔案 I/O 時,建議優先使用
Bun.file()和Bun.write()而非 Node.jsfs,以獲得顯著更快的檔案操作,並使用Bun.Glob進行模式比對。 - 處理驗證時,使用
Bun.password.hash()和Bun.password.verify()進行 bcrypt/argon2,無需使用 npm 套件。 - 從 Node.js 遷移時,將指令碼中的
node替換為bun,保持package.json不變,並注意大多數 npm 套件無需修改即可運作。使用bun:sqlite取代 SQLite npm 套件來處理嵌入式資料庫。
範例
範例 1:建立高效能 API 伺服器
使用者請求:「使用 Bun 內建的 HTTP 伺服器建立一個 REST API」
操作步驟:
- 使用
Bun.serve()建立伺服器及路由處理器 - 使用
request.json()解析 JSON 主體並回傳Response物件 - 加入 WebSocket 升級以支援即時功能
- 使用
Bun.password進行驗證,使用bun:sqlite進行資料儲存
**輸出:**一個只使用 Bun 內建功能、無外部相依性的快速 API 伺服器。
範例 2:將 Node.js 專案遷移至 Bun
使用者請求:「將我的 Express 專案從 Node.js 切換到 Bun」
操作步驟:
- 在 CI 和本地設定中,將
npm install替換為bun install - 更新
package.json中的指令碼,將node改為bun run - 使用 Bun 內建的
.env載入功能取代dotenv - 將測試執行器從 Jest 切換為
bun test,測試檔案保持不變
**輸出:**一個由 Bun 驅動的專案,安裝、啟動和測試執行速度更快。
指導原則
- 新的 HTTP 伺服器請使用
Bun.serve();它在 Bun 上比 Express 快得多。 - 檔案操作建議優先使用
Bun.file()和Bun.write()而非 Node.jsfs。 - 本機資料儲存請使用
bun:sqlite,避免新增 SQLite npm 套件。 - 驗證請使用
Bun.password,而非bcrypt/argon2npm 套件,以達到零原生相依性。 - 將
bun.lock(文字格式)納入 git 以獲得可讀的 diff。 - 使用
bun test而非 Jest 進行測試,即可獲得相同 API 但執行速度顯著提升。 - 若目標為瀏覽器,請使用
Bun.build()並搭配target: "browser"。