歡迎使用 Bun
Bun 是一個用於開發現代 JavaScript/TypeScript 應用的一體化工具包。
一個快速的 JavaScript 執行環境,設計為 Node.js 的替代品
bun run 開始使用利用全域性快取和工作區,安裝包速度比 npm 快30倍
bun install 開始使用與 Jest 相容,TypeScript 優先支援快照、DOM 和監聽模式的測試
bun test 開始使用為瀏覽器和伺服器打包 TypeScript、JSX、React 和 CSS
bun build 開始使用入門指南
Bun 作為一個單一的、無相依的二進位制檔案提供,包含執行環境、套件管理器、測試執行器和打包器。您是 Bun 新手嗎?
內部組成
- 執行環境:幾乎無開銷地執行 JavaScript/TypeScript 檔案和包指令碼。
- 套件管理器:使用
bun install實現快速安裝、工作區、覆蓋和審計。 - 測試執行器:支援 Jest,TypeScript 優先,含快照、DOM 和監聽模式。
- 打包器:支援 JS/TS/JSX 的原生打包,含程式碼拆分、外掛和 HTML 匯入。
通過上方的卡片探索各個領域。每個部分都按照概述、簡短範例、參考資料和最佳實踐進行組織,便於快速瀏覽和深入瞭解。
什麼是 Bun?
Bun 是一個面向 JavaScript 和 TypeScript 應用的一體化工具包。它以名為 bun 的單個執行檔提供。
其核心是 Bun 執行環境,這是一個快速的 JavaScript 執行環境,旨在直接替代 Node.js。它使用 Rust 編寫,由 JavaScriptCore 驅動,從而減少啟動時間和記憶體使用。
bun run index.tsx # 預設支援 TS 和 JSX
bun 命令列工具還實現了測試執行器、指令碼執行器和相容 Node.js 的套件管理器。這三者都比現有工具快得多,而且你可以在現有 Node.js 專案中使用它們,幾乎無需修改。
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 建置應用的統一基礎設施工具包:包括套件管理器、轉譯器、打包器、指令碼執行器和測試執行器。