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 仍在開發中。使用它來加速您的開發工作流程,或在資源受限的環境(例如無伺服器函式)中執行較簡單的生產程式碼。我們正在努力提高與 Node.js 的相容性,並整合現有的架構。加入 Discord 並觀看 GitHub 儲存庫 以掌握未來版本的動態。
從以下快速連結開始,或繼續閱讀以進一步瞭解 Bun。
Install Bun
Do the quickstart
Install a package
Use a project template
Bundle code for production
Build an HTTP server
Build a Websocket server
Read and write files
Run SQLite queries
Write and run tests
什麼是執行階段?
JavaScript(或更正式地說,ECMAScript)只是一個程式語言的規格。任何人都可以撰寫 JavaScript 引擎,它會讀取有效的 JavaScript 程式並執行它。當今使用最廣泛的兩個引擎是 V8(由 Google 開發)和 JavaScriptCore(由 Apple 開發)。兩者都是開源的。
但大多數 JavaScript 程式並非在真空中執行。它們需要一種方法來存取外部世界以執行有用的任務。這就是執行階段發揮作用的地方。它們實作了額外的 API,然後提供給它們執行的 JavaScript 程式使用。
瀏覽器
值得注意的是,瀏覽器隨附 JavaScript 執行階段,實作了一組透過全域 window
物件公開的特定於 Web 的 API。瀏覽器執行的任何 JavaScript 程式碼都可以使用這些 API 在當前網頁的背景下實作互動式或動態行為。
Node.js
類似地,Node.js 是一個 JavaScript 執行階段,可用於非瀏覽器環境,例如伺服器。由 Node.js 執行的 JavaScript 程式可以存取一組特定於 Node.js 的 全域變數,例如 Buffer
、process
和 __dirname
,以及內建模組,用於執行作業系統層級的任務,例如讀取/寫入檔案(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 建置應用程式,包括套件管理員、轉譯器、打包器、指令碼執行器、測試執行器等等。