執行環境套件管理器打包器測試執行器程式碼檢查格式化指南參考部落格意見回饋

歡迎使用 Bun

Bun 是一個用於開發現代 JavaScript/TypeScript 應用的一體化工具包。


入門指南

Bun 作為一個單一的、無相依的二進位制檔案提供,包含執行環境、套件管理器、測試執行器和打包器。您是 Bun 新手嗎?


內部組成

  • 執行環境:幾乎無開銷地執行 JavaScript/TypeScript 檔案和包指令碼。
  • 套件管理器:使用 bun install 實現快速安裝、工作區、覆蓋和審計。
  • 測試執行器:支援 Jest,TypeScript 優先,含快照、DOM 和監聽模式。
  • 打包器:支援 JS/TS/JSX 的原生打包,含程式碼拆分、外掛和 HTML 匯入。

通過上方的卡片探索各個領域。每個部分都按照概述、簡短範例、參考資料和最佳實踐進行組織,便於快速瀏覽和深入瞭解。


什麼是 Bun?

Bun 是一個面向 JavaScript 和 TypeScript 應用的一體化工具包。它以名為 bun 的單個執行檔提供。

其核心是 Bun 執行環境,這是一個快速的 JavaScript 執行環境,旨在直接替代 Node.js。它使用 Rust 編寫,由 JavaScriptCore 驅動,從而減少啟動時間和記憶體使用。

terminal
bun run index.tsx  # 預設支援 TS 和 JSX

bun 命令列工具還實現了測試執行器、指令碼執行器和相容 Node.js 的套件管理器。這三者都比現有工具快得多,而且你可以在現有 Node.js 專案中使用它們,幾乎無需修改。

terminal
bun run start                 # 執行 `start` 指令碼
bun install <pkg>             # 安裝一個包
bun build ./index.tsx         # 打包瀏覽器專案
bun test                      # 執行測試
bunx cowsay 'Hello, world!'   # 執行一個包

什麼是執行環境?

JavaScript(或者更正式地說,ECMAScript)僅僅是程式語言的一份_規範_。任何人都可以編寫一個 JavaScript 引擎,用於讀取並執行有效的 JavaScript 程式。目前使用最廣泛的兩個引擎是 V8(由 Google 開發)和 JavaScriptCore(由 Apple 開發)。兩者都是開源的。

但大多數 JavaScript 程式並不是在真空中執行的。它們需要一種訪問外部世界的方式,才能執行有用的任務。這正是 執行環境 的作用所在。執行環境實現了額外的 API,並將這些 API 提供給它們所執行的 JavaScript 程式。

瀏覽器

瀏覽器附帶了實現一組 Web 專用 API 的 JavaScript 執行環境,這些 API 暴露在全域性 window 物件上。瀏覽器執行的任何 JavaScript 程式碼都可以使用這些 API,為當前網頁新增互動式或動態行為。

Node.js

Node.js 是一種用於非瀏覽器環境(例如伺服器)的 JavaScript 執行環境。Node.js 執行的 JavaScript 程式除了可以使用用於執行作業系統級任務的內建模組(例如讀寫檔案的 node:fs,以及用於網路通訊的 node:net、node:http)之外,還可以訪問一組 Node.js 特有的全域性變數,例如 Buffer、process 和 __dirname。Node.js 還實現了基於 CommonJS 的模組系統和模組解析演算法,而這些早於 JavaScript 原生模組系統的出現。

Bun 被設計為 Node.js 的更快速、更精簡、更現代化的替代品。

設計目標

Bun 從零開始設計,充分考慮當今的 JavaScript 生態系統。

  • 速度。Bun 行程的啟動速度比 Node.js 快 4 倍。
  • TypeScript 與 JSX 支援。你可以直接執行 .jsx、.ts 和 .tsx 檔案;Bun 的轉譯器會在執行前將這些檔案轉換為原生 JavaScript。
  • ESM 與 CommonJS 相容性。整個生態正逐漸轉向 ES 模組(ESM),但 npm 上仍有數百萬個軟體包相依 CommonJS。Bun 推薦使用 ES 模組,但也支援 CommonJS。
  • 符合 Web 標準的 API。Bun 實現了 fetch、WebSocket 和 ReadableStream 等標準 Web API。Bun 由 Apple 為 Safari 開發的 JavaScriptCore 引擎驅動,因此 Headers 和 URL 等部分 API 直接使用 Safari 的實現。
  • Node.js 相容性。除了支援 Node 風格的模組解析之外,Bun 還致力於完全相容 Node.js 內建的全域性物件(process、Buffer)和模組(path、fs、http)。這項工作仍在進行中。 當前狀態請參閱 Node.js 相容性。

Bun 不僅僅是一個執行環境。其長期目標是打造一套用於使用 JavaScript/TypeScript 建置應用的統一基礎設施工具包:包括套件管理器、轉譯器、打包器、指令碼執行器和測試執行器。