跳轉到

2023:Bun 問世#

事件#

2023年9月,Oven 公司(Jarred Sumner)發佈 Bun 1.0:以 Zig + JavaScriptCore(WebKit 的引擎) 從零重寫的 JavaScript 運行時,整合了執行器、套件管理器、打包器與測試執行器於一身。

為何重要#

  • 全能一體:bun run、bun install、bun build、bun test 取代 Node + npm + webpack + Jest 的組合,且 bun install 比 npm 快數倍到數十倍。
  • 第三個主要運行時:繼 Node(V8)、Deno(V8)之後,Bun 選用 JavaScriptCore,證明運行時引擎不必綁定 V8。
  • Node 相容優先:直接支援 package.json 與大多數 npm 套件,走「相容替代」路線(對比 Deno 早期的「另起爐灶」路線)。
  • 效能軍備競賽延續:Bun 與 Node 22(2024,加入 --experimental-strip-types)、Deno 2(2024,npm 相容)互相追趕,整體生態持續加速。

理論與實用原因#

  • 理論原因:證明 JavaScript 工具鏈的效能瓶頸不是語言本質問題,而是實作問題——以系統語言(Zig)+ 高效引擎重寫即可解決。
  • 實用原因:開發者要安裝、設定、維護四套工具(runtime、套件管理、打包、測試);一體化消除「工具組合的摩擦」。

彌補了什麼缺陷#

彌補了 Node 生態「工具碎片化、安裝慢、啟動慢」的缺陷,也彌補了 Node/Deno 在「內建打包與測試」上的缺口。

相關條目#

程式範例#

1. 全能一體:四套工具 → 一個執行檔#

# Node 生態的工具組合
node server.js              # 執行
npm install                 # 套件管理(webpack 還要另配)
npx webpack                 # 打包
npx jest                    # 測試

# Bun:全部內建
bun run server.ts           # 執行(直接跑 TS!)
bun install                 # 套件管理(比 npm 快數倍到數十倍)
bun build ./src/index.ts    # 打包
bun test                    # 測試(jest 相容 API)

2. Node 相容優先:package.json 直接用#

{
  "dependencies": { "express": "^4.18.0" },
  "scripts": { "dev": "bun run server.ts" }
}
// 大多數 npm 套件直接可用(相容替代路線,對照 Deno 早期的另起爐灶)
import express from "express";   // Bun 內建 node_modules 相容層

3. 引擎差異:JavaScriptCore 而非 V8#

// Bun 用 WebKit 的 JavaScriptCore 引擎 + Zig 重寫執行層
// 證明:JS 效能瓶頸是實作問題,不是引擎綁定問題
bun --version    # 啟動速度、安裝速度全面領先(軍備競賽延續)