使用 workspaces 設定 monorepo
Bun 的套件管理器支援 npm 的 "workspaces"。Workspaces 將程式碼庫拆分為位於同一儲存庫中的不同軟體包,這些軟體包可以相互相依,並且(在可能的情況下)共享一個 node_modules 目錄。
克隆這個範例專案來嘗試使用 workspaces。
根目錄下的 package.json 不應包含 "dependencies"、"devDependencies" 或其他相依欄位。每個軟體包都應自包含,並宣告自己的相依項。通常會宣告 "private": true,以避免不小心將根軟體包釋出到 npm。
{
"name": "my-monorepo",
"private": true,
"workspaces": ["packages/*"]
}
通常會將所有軟體包放在 packages 目錄中。package.json 中的 "workspaces" 欄位支援 glob 模式,因此 packages/* 會將 packages 下的每個子目錄視為一個獨立的 軟體包(也稱為 workspace)。
.
├── package.json
├── node_modules
└── packages
├── stuff-a
│ └── package.json
└── stuff-b
└── package.json
要在 workspaces 之間新增相依,請使用 "workspace:*" 語法。以下範例將 stuff-a 新增為 stuff-b 的相依項。
{
"name": "stuff-b",
"dependencies": {
"stuff-a": "workspace:*" // [!code ++]
}
}
新增相依項後,請從專案根目錄執行 bun install,為所有 workspaces 安裝相依項。
bun install
要向特定 workspace 新增 npm 相依項,請切換到該目錄並像平常一樣執行 bun add。Bun 會檢測到你位於 workspace 中,將相依項新增到該 workspace 的 package.json,並更新根鎖定檔案。新 workspaces 預設使用隔離安裝,因此 Bun 會將軟體包安裝到根目錄的 node_modules/.bun 儲存中,並從 workspace 自身的 node_modules 建立符號連結。使用 --linker hoisted 時,Bun 會改為將軟體包提升到根目錄的 node_modules 中。
cd packages/stuff-a
bun add zod
請參閱 bun install。