Bun 是適用於 JavaScript 和 TypeScript 應用程式的一體化工具組。它以名為 bun
的單一可執行檔形式發布。
其核心是Bun 執行環境,這是一個快速的 JavaScript 執行環境,旨在作為 Node.js 的直接替代品。它以 Zig 語言編寫,並由底層的 JavaScriptCore 提供支持,大幅縮短了啟動時間和記憶體用量。
bun run index.tsx # TS and JSX supported out of the box
bun
命令列工具還實作了測試執行器、腳本執行器和 Node.js 相容的套件管理器,所有這些都比現有工具快得多,並且可以在現有的 Node.js 專案中使用,幾乎不需要任何變更。
bun run start # run the `start` script
bun install <pkg> # install a package
bun build ./index.tsx # bundle a project for browsers
bun test # run tests
bunx cowsay 'Hello, world!' # execute a package
從下面的快速連結開始,或繼續閱讀以了解更多關於 Bun 的資訊。
什麼是執行環境?
JavaScript (或更正式地說,ECMAScript) 僅僅是一種規格,用於規範程式語言。任何人都可以編寫 JavaScript 引擎,該引擎可以讀取有效的 JavaScript 程式並執行它。目前最流行的兩個引擎是 V8 (由 Google 開發) 和 JavaScriptCore (由 Apple 開發)。兩者都是開放原始碼。
但是大多數 JavaScript 程式並非在真空中執行。它們需要一種存取外部世界的方式來執行有用的任務。這就是執行環境的用途。它們實作額外的 API,然後提供給它們執行的 JavaScript 程式使用。
瀏覽器
值得注意的是,瀏覽器附帶 JavaScript 執行環境,這些環境實作了一組 Web 特定的 API,這些 API 通過全域 window
物件公開。瀏覽器執行的任何 JavaScript 程式碼都可以使用這些 API 在當前網頁的上下文中實作互動式或動態行為。
Node.js
同樣地,Node.js 是一個 JavaScript 執行環境,可用於非瀏覽器環境,例如伺服器。Node.js 執行的 JavaScript 程式可以存取一組 Node.js 特定的全域變數,例如 Buffer
、process
和 __dirname
,以及用於執行 OS 層級任務的內建模組,例如讀取/寫入檔案 (node:fs
) 和網路 (node:net
、node:http
)。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 實作了標準 Web API,例如
fetch
、WebSocket
和ReadableStream
。Bun 由 JavaScriptCore 引擎驅動,該引擎由 Apple 為 Safari 開發,因此某些 API (例如Headers
和URL
) 直接使用 Safari 的實作。 - Node.js 相容性。除了支援 Node 風格的模組解析外,Bun 的目標是完全相容於內建的 Node.js 全域變數 (
process
、Buffer
) 和模組 (path
、fs
、http
等)。這是一個持續進行中的工作,尚未完成。 請參閱相容性頁面以了解目前狀態。
Bun 不僅僅是一個執行環境。長期的目標是成為一個有凝聚力的基礎架構工具包,用於使用 JavaScript/TypeScript 構建應用程式,包括套件管理器、轉譯器、打包器、腳本執行器、測試執行器等等。