執行環境套件管理器打包器測試執行器程式碼檢查格式化指南參考部落格意見回饋

使用 workspaces 設定 monorepo

Bun 的套件管理器支援 npm 的 "workspaces"。Workspaces 將程式碼庫拆分為位於同一儲存庫中的不同軟體包,這些軟體包可以相互相依,並且(在可能的情況下)共享一個 node_modules 目錄。

克隆這個範例專案來嘗試使用 workspaces。


根目錄下的 package.json 不應包含 "dependencies"、"devDependencies" 或其他相依欄位。每個軟體包都應自包含,並宣告自己的相依項。通常會宣告 "private": true,以避免不小心將根軟體包釋出到 npm。

package.json
{
  "name": "my-monorepo",
  "private": true,
  "workspaces": ["packages/*"]
}

通常會將所有軟體包放在 packages 目錄中。package.json 中的 "workspaces" 欄位支援 glob 模式,因此 packages/* 會將 packages 下的每個子目錄視為一個獨立的 軟體包(也稱為 workspace)。

File
.
├── package.json
├── node_modules
└── packages
    ├── stuff-a
    │   └── package.json
    └── stuff-b
        └── package.json

要在 workspaces 之間新增相依,請使用 "workspace:*" 語法。以下範例將 stuff-a 新增為 stuff-b 的相依項。

packages/stuff-b/package.json
{
  "name": "stuff-b",
  "dependencies": {
    "stuff-a": "workspace:*" // [!code ++]
  }
}

新增相依項後,請從專案根目錄執行 bun install,為所有 workspaces 安裝相依項。

terminal
bun install

要向特定 workspace 新增 npm 相依項,請切換到該目錄並像平常一樣執行 bun add。Bun 會檢測到你位於 workspace 中,將相依項新增到該 workspace 的 package.json,並更新根鎖定檔案。新 workspaces 預設使用隔離安裝,因此 Bun 會將軟體包安裝到根目錄的 node_modules/.bun 儲存中,並從 workspace 自身的 node_modules 建立符號連結。使用 --linker hoisted 時,Bun 會改為將軟體包提升到根目錄的 node_modules 中。

terminal
cd packages/stuff-a
bun add zod

請參閱 bun install。