Bun:現代 JavaScript 的全能運行環境與極速工具箱

Bun 是近年來前端與 Node.js 圈最受矚目的新星。它不僅是一個像 Node.js 或 Deno 的 JavaScript 運行環境 (Runtime),更是一個「全能工具箱」,內建了套件管理器、打包工具 (Bundler) 與測試工具 (Test Runner)。

Bun 的核心使命非常簡單:讓 JavaScript 變得更快、更簡單。

為什麼選擇 Bun?

在傳統的 Node.js 生態系中,你可能需要 npm 來管理套件、webpackvite 來打包、jestvitest 來測試。Bun 將這些功能全部整合進一個單一的二進制檔案中。

1. 極致的速度

Bun 是用 Zig 語言編寫的,並使用了 Safari 的 JavaScriptCore 引擎,而非 Node.js 所使用的 V8。這讓 Bun 在啟動速度、檔案讀寫以及套件安裝上,往往比 Node.js 快上數倍。

2. 多合一工具箱 (All-in-one)

  • 運行環境 (Runtime):直接執行 JS/TS 檔案,支援大部分的 Node.js API。
  • 套件管理器 (Package Manager):比 npm 快的 bun install
  • 打包工具 (Bundler):可以極速打包前端代碼。
  • 測試工具 (Test Runner):內建相容 Jest 的測試環境。

3. 原生支援 TypeScript 與 JSX

你不再需要設定 tsconfig.json 或安裝 babel,Bun 可以直接執行 .ts.tsx 檔案。

安裝 Bun

Bun 的安裝非常迅速,支援多個平台:

# macOS 或 Linux
curl -fsSL https://bun.sh/install | bash

# Windows (使用 PowerShell)
powershell -c "irm bun.sh/install.ps1 | iex"

# 使用 NPM 安裝 (作為全域工具)
npm install -g bun

安裝完成後,在終端機輸入 bun --version 確認是否成功。

基礎指令實戰

建立專案:bun init

類似 npm init,Bun 會引導你建立基本的專案結構。

bun init

這會產生 package.jsonbun.lockb(Bun 的二進制 lock 檔)以及一個範例的 index.ts

管理套件:bun install 與 bun add

Bun 的安裝速度快到令人驚艷,它使用了零拷貝 (Zero-copy) 技術與全域快取。

# 安裝所有依賴
bun install

# 新增套件 (等於 npm install <name>)
bun add <package-name>

# 新增開發套件
bun add <package-name> --dev

移除套件:bun remove

移除不再需要的套件並同步更新 package.json

bun remove <package-name>

升級套件:bun update

Bun 提供了靈活的升級方式,能讓你快速跟上最新版本。

# 根據 package.json 規範升級至相容的最新版本
bun update

# 升級特定套件
bun update <package-name>

# 互動式升級 (非常推薦,可手動勾選)
bun update --interactive

# 忽略版本號規範,直接升級到絕對最新版 (Latest)
bun update --latest

檢查與列出套件:bun pm

當你需要查看專案的安裝狀態或檢查哪些套件過時了,可以使用 bun pm 指令群。

# 列出當前專案的第一層依賴套件與版本
bun pm ls

# 顯示完整的依賴樹 (包含巢狀依賴)
bun pm ls --all

# 檢查哪些套件已經有新版本可供更新
bun outdated

執行程式:bun run

你可以直接執行檔案,或是執行 package.json 中的腳本。

# 直接執行檔案 (支援 .js, .ts, .jsx, .tsx)
bun index.ts

# 執行腳本
bun run dev

# 啟用熱重載 (Hot Reloading)
bun --hot index.ts

快速執行工具:bunx

這等同於 npx,可以不需安裝直接執行套件庫中的工具,但速度快得多。

bunx create-next-app

進階內建功能

原生 .env 支援

Bun 預設會讀取專案根目錄下的 .env 檔案,你不再需要安裝 dotenv 套件。

// 在代碼中直接存取
console.log(process.env.DB_PASSWORD);

原生 SQLite 支援

Bun 內建了 bun:sqlite 模組,這是一個極高效的 SQLite 驅動程式,適合快速建立本地資料庫應用。

import { Database } from 'bun:sqlite';

const db = new Database(':memory:');
const query = db.query("select 'Hello world' as message;");
console.log(query.get()); // { message: "Hello world" }

內建測試工具:bun test

如果你熟悉 Jest,那麼 bun test 對你來說完全沒有門檻。

// math.test.ts
import { expect, test } from 'bun:test';

test('2 + 2', () => {
  expect(2 + 2).toBe(4);
});

執行 bun test 即可看到結果。

維護與優化

升級 Bun 本身:bun upgrade

為了獲得最新的效能優化與修補,定期升級 Bun 是個好習慣。

bun upgrade

快取管理

Bun 將套件儲存在全域快取中,若遇到異常,可以嘗試清理。

# 查看快取存放位置
bun pm cache

# 清除全域套件快取
bun pm cache rm

查看二進制路徑

快速找出 node_modules/.bin 的所在位置。

bun pm bin

結語:Bun vs Node.js 該選誰?

  • 選擇 Bun:如果你在開發新專案,追求极速的開發體驗(尤其是套件安裝與測試),或者想簡化工具鏈。
  • 選擇 Node.js:如果你需要極高的穩定性,或者你的專案依賴於某些目前 Bun 尚未完全支援的深度 Node.js C++ 擴充套件。

Bun 正在迅速成熟,對於大多數現代網頁開發者來說,它不僅是一個替代品,更是一個能顯著提升工作效率的強力戰友。