什麼是Bun?基於Node.js的一體化執行環境

什麼是Bun?基於Node.js的一體化執行環境

JavaScript 是世界上最流行、應用最廣泛的程式語言之一。它為網路應用程式、移動應用程式、桌面軟體甚至嵌入式裝置提供支援。儘管它被廣泛使用,但也並非沒有挑戰。與所有技術一樣,JavaScript 也面臨著效能、相容性、安全性和複雜性等問題。

為了解決這些問題,多年來開發了多個 JavaScript 執行時。其中,Node.jsDeno 尤為突出,它們都為解決 JavaScript 的侷限性提供瞭解決方案。然而,它們在解決了許多問題的同時,也帶來了新的問題,如需要不必要的軟體包和較慢的執行時效能。

現在,JavaScript 執行時 Bun 已經出現了一段時間,但該團隊最近才於 2023 年 9 月釋出了穩定版本。Bun 的目標是成為 Node.js 更直接、更高效的替代品。

本文將探討 Bun 及其獨特功能,以及如何將其整合到 JavaScript 專案中。

什麼是 Bun?

Bun.sh 網站主頁

Bun.sh 網站主頁

Bun 是一個 JavaScript 執行時,主要使用 Zig 程式語言編寫。它旨在解決 Node.js 的侷限性,同時提供更精簡、更高效的開發體驗。

然而,Bun 並不像多年來出現的許多 JavaScript 執行時一樣,只是另一種 JavaScript 執行時: 它是一個一體化工具包,旨在徹底改變開發人員使用 JavaScript 和 TypeScript 的方式。Bun 擴充套件了為蘋果 Safari 提供動力的 JavaScriptCore 引擎,可以實現更快的啟動時間和更好的記憶體使用率。

與 Node.js 不同,Bun 的執行不依賴 npm 或外部依賴項。相反,它有一個內建的標準庫,為各種協議和模組提供功能,包括環境變數、HTTP、WebSocket、檔案系統等。

它還提供對 TypeScript 的開箱即用支援。由於 Bun 在內部轉譯了每個 JavaScript 或 TypeScript 原始檔,因此你可以直接編譯和執行 TypeScript 檔案,而無需額外的配置或轉譯。

Bun 隨附功能強大的命令列介面 (CLI) 工具,可讓你使用以下直接命令 runformatlinttest͏, 和 bundle 程式碼:

  • bun run — 使用 Bun 執行 JavaScript 或 TypeScript 檔案。
  • bun test — 使用 Bun 內建的測試框架執行單元測試。
  • bun fmt — 使用 Bun 內建的程式碼格式化工具格式化程式碼。
  • bun lint — 使用 Bun 內建的程式碼篩選器篩選程式碼。
  • bun bundle — 使用 Bun 內建的程式碼捆綁器捆綁程式碼。

Bun 的另一個突出特點是它的熱過載功能,該功能可在保留應用程式狀態的同時即時重新整理程式碼更改。這是對 Node.js 的重大改進,在 Node.js 中,類似的功能需要 nodemon 等外部軟體包或 --watch 實驗標誌。相比之下,Bun 使用 --hotflag 簡化了這一過程。

除了技術上的優勢,Bun 還擁有一個不斷壯大的使用者社羣,他們為 Bun 的開發和改進做出了積極貢獻。這個充滿活力的社羣確保了 Bun 的及時更新和響應,併為學習和故障排除提供了充足的資源。

Bun 的核心功能

除了熱過載、對 TypeScript 的原生支援和更快的啟動時間外,Bun 還有幾個核心特性為其作為 JavaScript 執行時的受歡迎程度和效能做出了貢獻:它的捆綁程式、測試執行程式和包管理器。下面讓我們詳細討論這些特性。

捆綁程式

捆綁程式將 JavaScript 程式碼及其依賴關係整合到一個檔案中͏,從而優化瀏覽器或 Node.js 應用程式的載入效率。Node.js 缺乏原生捆綁程式͏,開發人員在處理 JavaScript 程式碼時需要依賴 Rollup、Webpack 和 ͏Parcel 等第三方捆綁程式。

相比之下,Bun 提供的內建捆綁程式只需最少的配置,並支援不同的模組格式。它還具有內建優化功能,支援更快的捆綁。相比之下,Bun 的捆綁程式優於其他捆綁程式,執行速度比 ͏esbuild 快 1.75 倍,比 Parcel 快 150 倍,比 Rollup + Terser 快 180 倍,比 Webpack 快 220 倍

你可以通過 bun bundle ͏<source>--out-dir<directory> 命令捆綁你的專案。它會在指定的輸出目錄中生成輸出檔案:

將專案與 Bun 捆綁

將專案與 Bun 捆綁

測試執行器

測試͏ 是軟體開發的重要組成部分,可確保程式碼的功能性,並在生產前發現潛在問題。Bun 也在其工具包中加入了測試執行程式。

此外,Node.js 開發人員還採用了 Jest 等外部測試框架,這些框架功能強大、靈活,但會給專案帶來額外的依賴性和配置開銷。

另一方面,Bun 整合了自己的測試執行器,強調速度和相容性。這種整合方法具有以下優勢:

  • 速度 – 由於測試執行程式內建於執行時中,因此可以直接執行測試,而無需載入外部測試框架。因此,測試執行速度更快,這對大型程式碼庫或持續整合環境尤為有利。
  • 相容性 – 內建測試執行程式可與 Bun 的其他功能無縫配合。它利用 Bun 的快速啟動時間和高效記憶體使用,確保您的測試在模擬生產環境的環境中執行。
  • 簡便性 – 有了內建測試執行程式,你就無需擔心執行時與測試框架之間的配置和相容性問題。您可以使用相同的語言功能和應用程式介面,編寫與應用程式程式碼類似的測試。

Bun 中的測試執行程式與各種測試框架完全相容。執行測試就像執行 bun test 命令一樣簡單。

此外,由於 Bun 本身支援 TypeScript 和 JSX,因此無需額外的配置或外掛。您可以專注於編寫高質量的測試,而不是設定測試環境。

軟體包管理器

Bun 的 Node.js 相容包管理器比 npm、yarn 和 pnpm 快得多。它能加快速度、減少磁碟使用量並最大限度地減少記憶體佔用。

Bun 團隊對 Bun、ppm、npm 和 Yarn 的基準測試

Bun 團隊對 Bun、ppm、npm 和 Yarn 的基準測試

通過使用 symli͏nks,Bun 將每個專案的軟體包連結到一個集中的位置,從而省去了為後續專案重新下載模組的麻煩。

Bun 入門

要開始在電腦上使用 Bun,首先要安裝它。安裝 Bun 有多種方法,包括使用 cURL 命令、npm 或 Homebrew。不過,需要注意的是,Bun 最適合在 macOS 或 Linux 系統上使用。

要通過 cURL 命令安裝 Bun,請在終端執行以下命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
curl -fsSL https://bun.sh/install | bash
curl -fsSL https://bun.sh/install | bash
curl -fsSL https://bun.sh/install | bash

安裝成功後,請在終端執行 bun --version 進行驗證。這將確認 Bun 已準備就緒,可以使用。

現在,你可以探索 Bun 的功能了。你可以使用 bun run 命令來執行 Node.js 專案。此外,要執行名為 index.ts 的 TypeScript 檔案,可使用 bun run index.ts –Bun 會轉換你的 TypeScript 檔案,無需額外的軟體包。

Bun 的實用性遠不止這些基本功能。它能與 ReactNext.js 等 JavaScript 框架無縫整合。要深入瞭解 Bun 的功能,請檢視官方文件

如何使用 Bun 執行 Node.js 專案

使用 Bun 遷移或執行 Node.js 專案非常簡單,只需執行幾個 Bun CLI 命令即可。請按照以下步驟使用 Bun 執行 Node.js 專案:

首先,安裝 Bun。安裝好 Bun 後,導航到包含 Node.js 專案檔案(包括 package.json 檔案)的目錄。在專案的工作目錄中,執行此命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
bun install
bun install
bun install

通過上述命令,Bun 可以讀取 Node.js 專案總監͏y 中的 package.json 檔案,檢視͏ lock.json 檔案(如果存在),並使用內建軟體包管理器安裝列出的依賴項。

使用 Bun 安裝依賴項

使用 Bun 安裝依賴項

安裝好依賴項後,就可以用 Bun 執行專案了。使用 bun run 命令,然後輸入專案的入口點檔案:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
bun run
bun run
bun run

例如,如果專案的入口點是一個名為 index.js 的檔案,請輸入 bun run index.͏js

Bun 會執行指定檔案中的 JavaScript 或 TypeScript co͏de。如果專案的 package.json 檔案中定義了啟動指令碼,也可以使用 bun start 執行專案。

在 Visual Studio Code 中執行 Bun 專案

在 Visual Studio Code 中執行 Bun 專案

過渡到新的執行環境可能會帶來挑戰。不過,Bun 對 Node.js 模組的強大支援、對全域性變數的識別,以及對 Node.js 模組解析演算法的遵循,都能簡化從 Node.js 遷移到 ͏Bun 的過程。

假設您正在開發一個 Node.js 專案,該專案目前使用 dotenv 包管理環境變數。在這種情況下,你可以放心地從專案中移除 dotenv 包及其初始化程式碼。這是因為 Bun 內建了自動讀取 .env 檔案的功能,因此不需要 dotenv 包。

請記住,Bun 仍處於開發階段,因此在遷移過程中最好謹慎行事。

小結

作為 JavaScript 執行時,Bun 因多種原因而變得越來越重要。它的設計注重效能和簡潔性,旨在簡化開發流程並提高整體效率。它的模組化架構讓你可以只選擇特定專案所需的元件,減少不必要的開銷。

與 Node.js 不同,Bun 佔用空間更小,啟動時間更短。對於需要快速響應時間和有效利用資源的應用程式來說,這一優勢至關重要。Bun 的簡單性和模組化方法有助於提供更直接、更可定製的開發體驗。

評論留言