Bun:現代 JavaScript 的全能運行環境與極速工具箱
Bun 是近年來前端與 Node.js 圈最受矚目的新星。它不僅是一個像 Node.js 或 Deno 的 JavaScript 運行環境 (Runtime),更是一個「全能工具箱」,內建了套件管理器、打包工具 (Bundler) 與測試工具 (Test Runner)。
Bun 的核心使命非常簡單:讓 JavaScript 變得更快、更簡單。
為什麼選擇 Bun?
在傳統的 Node.js 生態系中,你可能需要 npm 來管理套件、webpack 或 vite 來打包、jest 或 vitest 來測試。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.json、bun.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 正在迅速成熟,對於大多數現代網頁開發者來說,它不僅是一個替代品,更是一個能顯著提升工作效率的強力戰友。