Nub: 一款由 Rust 驅動的 Node.js 全方位工具包
Nub: 一款由 Rust 驅動的 Node.js 全方位工具包
Nub 是一款使用 Rust 編寫的高速全方位工具包,它旨在增強現有的 Node.js 執行環境,而非取代它。其目標是提供類似 Bun 或 Deno 的開發者體驗 (DX)——提供內建的 TypeScript 支援、高效能的套件管理器,以及整合的版本管理——同時保持與現有 Node.js 生態系統的完全相容性,並避免特定供應商的 API 鎖定。
高效能工具與基準測試
Nub 使用 Rust 二進位檔取代了數個常見的 JavaScript 工具,以消除與啟動 Node.js 程序相關的啟動延遲。這在整個開發生命週期中帶來了顯著的效能提升。
腳本與套件執行
Nub 的腳本執行器 (nub run) 與套件執行器 (nubx) 被設計為 npm run、pnpm run、npx 與 pnpm dlx 的直接替代方案。
- 腳本分派:
nub run比pnpm run快約 24 倍,比npm run快約 22 倍;在熱啟動分派時間方面,nub run為 14.7ms,而npm為 329.9ms,pnpm為 442.7ms。 - 套件執行:
nubx透過消除雙重 Node.js 啟動的開銷,執行本地二進位檔的速度比npx快約 19 倍。
套件管理
由 Aube 引擎驅動,nub install 是 pnpm 的相容性替代方案。在針對一個擁有 222 個依賴項的專案進行熱凍結安裝 (warm frozen install) 的基準測試中,Nub 的表現優於其他管理器:
| Tool | Time | Relative Performance |
|---|---|---|
| Nub | 1122 ms | — |
| Bun | 1444 ms | 29% slower |
| pnpm | 2847 ms | 2.5× slower |
| npm | 4163 ms | 3.7× slower |
TypeScript 優先的 Node.js 執行環境
Nub 允許開發者直接執行 .ts、.tsx、.js 與 .jsx 檔案,無需額外的建置步驟。其啟動速度比 tsx 快 2.9 倍。
技術實作
Nub 利用現代 Node.js 的擴充介面來提供其增強功能:
- 轉譯 (Transpilation): 它內嵌了
oxc函式庫用於預轉譯。 - Hooks: 它使用
module.registerHooks()與--import/--require預載功能來進行自定義轉譯與解析。 - 原生擴充 (Native Addons): 它利用 N-API 原生擴充來將 Rust 邏輯整合到 Node.js 程序中。
語言與 API 支援
Nub 提供對現代 JavaScript 與 TypeScript 特性的全面支援:
- TypeScript 支援: 完全支援
enum、namespace、無副檔名匯入 (extensionless imports) 以及tsconfig.json#paths解析。 - 現代 API: Nub 會在較舊的 Node 版本上自動為
Temporal、URLPattern與RegExp.escape等 API 提供 Polyfill,並將實驗性 Node.js 特性(如node:sqlite、vm.Module與WebSocket)設為非實驗性狀態。 - 環境變數管理: 內建自動載入
.env*的功能,提供與 Next.js 與 Vite 相當的體驗。
整合式 Node.js 生態系統管理
Nub 將數個零散的工具整合進單一二進位檔中,同時管理專案依賴項與 Node.js 執行環境本身。
Node 版本管理
Nub 的功能類似於 nvm 或 fnm 的版本管理器。它可以透過 nub node install 手動配置版本,或是從 .node-version、.nvmrc、package.json#engines 或 package.json#devEngines 自動推斷所需的 Node 版本並即時安裝。
套件管理器相容性
Nub 可以運行在「相容模式」(compat-mode) 下,根據 lockfiles 或 package.json 設定來偵測現有的套件管理器(npm、pnpm、Bun 或 Yarn)。在此模式下,它會遵循現有工具的特定設定檔(例如 pnpm-lock.yaml 或 bunfig.toml)與環境變數。
套件元數據管理 (Package Meta-Management)
透過 nub pm shim,Nub 提供了一個 Corepack 功能的 Rust 原生實作,透過為 npm、yarn 與 pnpm 註冊全域 Shim,以確保在特定專案中使用正確版本的套件管理器。