Bun 執行環境 是做什麼的?
Bun 是一個快速的全方位 JavaScript 執行環境與工具組:它同時是執行環境、套件管理器、打包工具和測試執行器。
使用時機
- 優先選擇 Bun 的情況:新的 JS/TS 專案、重視安裝/執行速度的腳本、使用 Bun 執行環境的 Vercel 部署,以及希望使用單一工具鏈(執行 + 安裝 + 測試 + 建置)時。
- 優先選擇 Node 的情況:需要最大生態系相容性、使用假設為 Node 環境的舊工具,或當某個相依套件已知在 Bun 上有問題時。
適用於:採用 Bun、從 Node 遷移、撰寫或除錯 Bun 腳本/測試,或在 Vercel 或其他平台上設定 Bun。
運作方式
- 執行環境:可作為 Node 的替代品(基於 JavaScriptCore,以 Zig 實作)。
- 套件管理器:
bun install顯著比 npm/yarn 快。鎖定檔案預設為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 及其生態系演進迅速。