JavaScript 是世界上最流行、應用最廣泛的程式語言之一。它為網路應用程式、移動應用程式、桌面軟體甚至嵌入式裝置提供支援。儘管它被廣泛使用,但也並非沒有挑戰。與所有技術一樣,JavaScript 也面臨著效能、相容性、安全性和複雜性等問題。
為了解決這些問題,多年來開發了多個 JavaScript 執行時。其中,Node.js 和 Deno 尤為突出,它們都為解決 JavaScript 的侷限性提供瞭解決方案。然而,它們在解決了許多問題的同時,也帶來了新的問題,如需要不必要的軟體包和較慢的執行時效能。
現在,JavaScript 執行時 Bun 已經出現了一段時間,但該團隊最近才於 2023 年 9 月釋出了穩定版本。Bun 的目標是成為 Node.js 更直接、更高效的替代品。
本文將探討 Bun 及其獨特功能,以及如何將其整合到 JavaScript 專案中。
什麼是 Bun?
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) 工具,可讓你使用以下直接命令 run
, format
, lint
, test͏
, 和 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 也在其工具包中加入了測試執行程式。
此外,Node.js 開發人員還採用了 Jest 等外部測試框架,這些框架功能強大、靈活,但會給專案帶來額外的依賴性和配置開銷。
另一方面,Bun 整合了自己的測試執行器,強調速度和相容性。這種整合方法具有以下優勢:
- 速度 – 由於測試執行程式內建於執行時中,因此可以直接執行測試,而無需載入外部測試框架。因此,測試執行速度更快,這對大型程式碼庫或持續整合環境尤為有利。
- 相容性 – 內建測試執行程式可與 Bun 的其他功能無縫配合。它利用 Bun 的快速啟動時間和高效記憶體使用,確保您的測試在模擬生產環境的環境中執行。
- 簡便性 – 有了內建測試執行程式,你就無需擔心執行時與測試框架之間的配置和相容性問題。您可以使用相同的語言功能和應用程式介面,編寫與應用程式程式碼類似的測試。
Bun 中的測試執行程式與各種測試框架完全相容。執行測試就像執行 bun test
命令一樣簡單。
此外,由於 Bun 本身支援 TypeScript 和 JSX,因此無需額外的配置或外掛。您可以專注於編寫高質量的測試,而不是設定測試環境。
軟體包管理器
Bun 的 Node.js 相容包管理器比 npm、yarn 和 pnpm 快得多。它能加快速度、減少磁碟使用量並最大限度地減少記憶體佔用。
Bun 團隊對 Bun、ppm、npm 和 Yarn 的基準測試
通過使用 symli͏nks,Bun 將每個專案的軟體包連結到一個集中的位置,從而省去了為後續專案重新下載模組的麻煩。
Bun 入門
要開始在電腦上使用 Bun,首先要安裝它。安裝 Bun 有多種方法,包括使用 cURL 命令、npm 或 Homebrew。不過,需要注意的是,Bun 最適合在 macOS 或 Linux 系統上使用。
要通過 cURL 命令安裝 Bun,請在終端執行以下命令:
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 的實用性遠不止這些基本功能。它能與 React 和 Next.js 等 JavaScript 框架無縫整合。要深入瞭解 Bun 的功能,請檢視官方文件。
如何使用 Bun 執行 Node.js 專案
使用 Bun 遷移或執行 Node.js 專案非常簡單,只需執行幾個 Bun CLI 命令即可。請按照以下步驟使用 Bun 執行 Node.js 專案:
首先,安裝 Bun。安裝好 Bun 後,導航到包含 Node.js 專案檔案(包括 package.json 檔案)的目錄。在專案的工作目錄中,執行此命令:
bun install
通過上述命令,Bun 可以讀取 Node.js 專案總監͏y 中的 package.json 檔案,檢視͏ lock.json 檔案(如果存在),並使用內建軟體包管理器安裝列出的依賴項。
使用 Bun 安裝依賴項
安裝好依賴項後,就可以用 Bun 執行專案了。使用 bun run
命令,然後輸入專案的入口點檔案:
bun run
例如,如果專案的入口點是一個名為 index.js 的檔案,請輸入 bun run index.͏js
。
Bun 會執行指定檔案中的 JavaScript 或 TypeScript co͏de。如果專案的 package.json 檔案中定義了啟動指令碼,也可以使用 bun start
執行專案。
在 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 的簡單性和模組化方法有助於提供更直接、更可定製的開發體驗。
評論留言