Bun 執行環境 是做什麼的?
Bun 是一個快速的全能型 JavaScript 執行環境與工具鏈:執行環境、套件管理器、打包工具與測試執行器。
使用時機
- 偏好 Bun 的情況:新 JS/TS 專案、注重安裝與執行速度的腳本、使用 Bun 執行環境的 Vercel 部署,以及想要單一工具鏈(執行 + 安裝 + 測試 + 建置)時。
- 偏好 Node 的情況:需要最大生態系相容性、使用依賴 Node 的舊有工具,或是某個相依套件已知在 Bun 上有問題時。
在以下情境使用:採用 Bun、從 Node 遷移、撰寫或除錯 Bun 腳本/測試,或在 Vercel 或其他平台上設定 Bun。
運作方式
- 執行環境:可作為 Node 的替代執行環境(基於 JavaScriptCore,以 Zig 實作)。
- 套件管理器:
bun install速度遠快於 npm/yarn。目前 Bun 預設使用bun.lock(純文字)鎖定檔案;較舊版本使用bun.lockb(二進位)。 - 打包工具:內建應用程式與函式庫的打包與轉譯器。
- 測試執行器:內建
bun test,採用類似 Jest 的 API。
從 Node 遷移:將 node script.js 取代為 bun run script.js 或 bun script.js。使用 bun install 取代 npm install;大多數套件都能正常運作。使用 bun run 執行 npm 腳本;使用 bun x 執行類似 npx 的一次性指令。支援 Node 內建模組;若 Bun 提供對應 API,建議優先使用以獲得較佳效能。
Vercel:在專案設定中將執行環境設為 Bun。建置指令:bun run build 或 bun build ./src/index.ts --outdir=dist。安裝指令:使用 bun install --frozen-lockfile 確保可重複部署。
範例
執行與安裝
# 安裝相依套件(建立/更新 bun.lock 或 bun.lockb)
bun install
# 執行腳本或檔案
bun run dev
bun run src/index.ts
bun src/index.ts
腳本與環境變數
bun run --env-file=.env dev
FOO=bar bun run script.ts
測試
bun test
bun test --watch
// test/example.test.ts
import { expect, test } from "bun:test";
test("add", () => {
expect(1 + 2).toBe(3);
});
執行環境 API
const file = Bun.file("package.json");
const json = await file.json();
Bun.serve({
port: 3000,
fetch(req) {
return new Response("Hello");
},
});
最佳實務
- 提交鎖定檔案(
bun.lock或bun.lockb)以確保可重複安裝。 - 優先使用
bun run執行腳本。對於 TypeScript,Bun 原生支援執行.ts檔案。 - 保持相依套件更新;Bun 及其生態系發展快速。