Title text reads Leveraging Bun on Vultr: A superior Node.js alternative. On a blue background, there's a playful bunny icon in the top right corner and the JavaScript logo in the bottom left corner.
贊助

在 Vultr 上利用 Bun:Node.js 的卓越替代品

閱讀時間 5 分鐘

Bun 是一個 JavaScript 執行時,設計為 Node.js 的即插即用替代品。它是一個全能型解決方案:它自帶打包器、測試執行器和與 Node.js 相容的包管理器。由於其內建 API 和對 JavaScriptCore 引擎的使用,它在速度上比 Node.js 和 Deno 等執行時有了顯著提升。

在本文中,我們將討論 Bun 的特性,包括其與 ECMAScript 模組、CommonJS 和 Node.js 的相容性,以及它作為包管理器和打包器的用途。我們將深入瞭解 Bun 獨特的內建 API,這些 API 使它在功能上區別於 Node.js 和 Deno 等同類產品。我們還將演示如何使用 Bun 市場應用程式Vultr 雲計算伺服器上執行一個示例 Bun 應用程式。

探索 Bun 的功能

JavaScript 引擎

Bun 使用 JavaScriptCore (JSC),這是一個為 Safari 開發的開源 JavaScript 引擎,而 Node.js 和 Deno 都使用 Chrome 中的 V8 JavaScript 引擎。這兩個引擎都有各自的優勢。JSC 優先考慮更快的啟動時間,並使用三個最佳化編譯器,這使其更復雜但更快,並且消耗的記憶體更少。另一方面,V8 專注於快速執行,擁有兩個最佳化編譯器,這使其不那麼複雜且易於使用;然而,由於更多的執行時最佳化,它需要更多的記憶體。這些引擎之間的差異使得 Bun 的速度比 Node.js 快三到四倍。

Bun 與 ES 模組和 CommonJS 的相容性

Bun 最方便的特性之一是它透過在同一個檔案中同時支援 ES 模組和 CommonJS 來簡化模組系統,這是 Node.js 無法實現的特性。

js
const fs = require("fs");
const path = require("path");

import { add, subtract } from "./math";

console.log(fs.readFileSync(path.join(__dirname, "file.txt"), "utf8"));
console.log(add(5, 3));
console.log(subtract(10, 7));

無需任何額外配置,即可在同一個檔案中同時使用 importconst

Bun 與 Node.js 的相容性

  • 對內建模組的支援:作為 Node.js 的即插即用替代品,Bun 支援關鍵的 Node.js 內建模組,如 fs(檔案系統)、path(路徑操作)和 net(網路),從而保持了預期的行為。

  • 全域性變數的識別:Bun 還支援 Node.js 中常用的全域性變數,如 __dirname(表示當前模組的目錄名)和 process(提供有關當前 Node.js 程序的資訊)。這確保了依賴這些變數的 Node.js 程式碼在 Bun 環境中能夠按預期工作。

  • 遵循 Node.js 模組解析演算法:Bun 遵循 Node.js 模組解析演算法,這是一套 Node.js 用於在程式中查詢和載入模組的規則。這包括遵循 node_modules 目錄熟悉的結構,外部依賴通常儲存在此目錄中。

Bun 作為包管理器和打包器

除了執行時,Bun 還附帶了一個比其他替代方案相對更快的包管理器。這歸因於這樣一個事實:在模組安裝後,Bun 會將其下載到全域性模組快取中。如果稍後再次需要該模組,Bun 會首先檢查快取,以避免重複安裝。

以下是一些常用的 Bun 命令

  • 安裝所有依賴項

    bash
    bun install
    
  • 向專案中新增新包

    bash
    bun add <package>
    
  • 新增僅用於開發的包

    bash
    bun add <package> --dev
    
  • 從專案中移除包

    bash
    bun remove <package>
    
  • 將特定包更新到最新版本

    bash
    bun update <package>
    
  • 執行指定的指令碼

    bash
    bun run <script>
    

Bun 不僅是一個執行時,也是一個用於打包 JavaScript 和 TypeScript 的打包器。它包含一個可以針對瀏覽器、Node.js 和其他平臺的最小化器。這使得 Bun 有別於其他依賴 WebPack、Rollup 和 Parcel 等第三方工具進行打包的執行時。

要打包 index.tx 檔案,請使用以下命令

bash
bun build ./index.tsx --outdir ./build

此命令會將打包後的檔案寫入磁碟上的 ./build 目錄。

Bun 中的熱過載

在常用的 Node.js 執行時中,nodemon 是用於硬重啟的工具。該工具負責監視檔案的變化,並在檢測到更改時重新啟動整個 Node.js 程序。這種方法有時會導致中斷,例如斷開 HTTP 和 WebSocket 連線。

為了解決這個問題,Bun 透過 --hot 標誌增強了熱過載功能。該標誌會就地重新載入程式碼,而無需完全重啟。透過這種方法,現有的 HTTP 連線不會受到干擾,從而使熱過載幾乎瞬時完成。這最終提高了開發效率和速度。

以下是使用 Bun 熱過載命令的方法

bash
bun --hot run index.ts

理解 Bun 的 API

Bun 提供了幾個內建的、最佳化的原生 API,主要用於伺服器端任務,例如使用 Bun 全域性物件啟動 HTTP 伺服器。其中一些 API 如下所述。

  • Bun.serve():您可以使用 Bun 的 API 設定 HTTP,這些 API 更快,並且能夠處理大量請求。Bun 中的 HTTP 伺服器使用 Bun.serve 啟動,如下所示

    js
    Bun.serve({
      fetch(req) {
        return new Response("Bun!");
      },
    });
    
  • Bun.file():此 API 可以惰性載入檔案並訪問其內容,這比其他同類產品要快得多。

    js
    const file = Bun.file("package.json");
    await file.text();
    
  • Bun.write():此 API 用於將資料寫入磁碟。

    js
    await Bun.write("index.html", "<html></html>");
    

在 Vultr 上部署伺服器

  1. 註冊並登入 Vultr 客戶門戶

  2. 導航到產品頁面。

  3. 從側邊選單中,選擇計算

    Screenshot of the Vultr customer portal Compute side menu to deploy a new Cloud Compute server
  4. 點選中心的部署伺服器按鈕。

  5. 選擇 **Cloud Compute** 作為伺服器型別。

  6. 在 **Server Location** 部分,選擇您選擇的區域。

  7. 在 **Marketplace Apps** 部分,選擇 **Bun**。

    Screenshot of Vultr customer portal showing the Marketplace Apps tab with the Bun option selected
  8. 在 **Server Size** 部分,選擇您選擇的伺服器大小。

  9. 根據需要,在 **Additional Features** 部分選擇更多功能。

  10. 點選右下角的立即部署按鈕。

執行 Bun 應用程式

在按照前面描述設定 Vultr 伺服器後,本節將指導您使用 Vultr 的 Bun 市場應用程式建立一個示例 Bun HTTP 應用程式。

  1. 使用以下命令驗證 Bun 安裝

    bash
    bun --version
    
  2. 建立一個 JavaScript 檔案。我們在這裡使用 Nano 文字編輯器。

    bash
    nano demo.js
    
  3. 將以下程式碼複製並貼上到檔案中

    js
    const port = 8080;
    console.log(`Server started on port ${port}`);
    
    Bun.serve({
      port: port,
      fetch(request) {
        return new Response("Hello world");
      },
    });
    
  4. 儲存檔案(Ctrl + OEnter)並退出編輯器(Ctrl + X)。

  5. 允許埠 8080 的入站連線。

    bash
    ufw allow 8080
    
  6. 使用以下命令啟動 Bun 伺服器

    bash
    bun demo.js
    

    輸出將如下所示

    Server started on port 8080
    
  7. 您可以透過以下連結訪問 Bun 應用程式

    http://SERVER_IP:8080
    

總結

在本文中,我們深入探討了 Bun 執行時,瞭解了它的功能以及它與替代執行時的區別。我們探討了 Bun 如何作為 Node.js 的即插即用替代品。此外,我們還學習瞭如何使用 Vultr 的 Bun 市場應用程式和 Bun 的內建 API 功能設定 Bun HTTP 伺服器,從而使整個過程更加快速、高效和可靠。

這是一篇由 Vultr 贊助的文章。Vultr 是全球最大的私營雲計算平臺。Vultr 是開發者的首選,已為 185 個國家/地區的 150 萬多客戶提供了靈活、可擴充套件、全球化的雲計算、雲 GPU、裸金屬和雲端儲存解決方案。瞭解更多關於 Vultr 的資訊。