工作區
pnpm 內建了對 Monorepo (單一存放庫,又稱為多重套件存放庫、多重專案存放庫或整合型存放庫) 的支援。 您可以建立一個工作區來將多個專案結合在一個單一存放庫的內部。
工作區的根目錄中必須具有 pnpm-workspace.yaml 檔。 工作區的根目錄中也可能會具有 .npmrc。
如果您要研究 monorepo 管理,那麽您還可能想要研究 Bit。 Bit 實際上使用的是 pnpm,但是它會自動執行許多目前在由 pnpm/npm/Yarn 所管理的傳統工作區中需要手動執行的動作 。 有一篇有關 bit install 的文章提到這些:用 Bit 輕鬆管理單一存放庫相依性 (英文網頁)。
工作區通訊協定 (workspace:)
預設情況下,如果可用的套件與已宣告的範圍相符,pnpm 將會連接工作區中的套件。 例如,如果 bar 在其依賴項中有 "foo": "^1.0.0" 並且 foo@1.0.0 在 Workspace 中,則 foo@1.0.0 連接到 bar。 但是,如果 bar 在依賴項中有 "foo": "2.0.0" 並且 foo@2.0.0 不在工作區中,則將從 npm registry 中安裝 foo@2.0.0。 這種行為引入了一些不確定性。
幸運的是,pnpm 支持 workspace: 協議。 當使用此通訊協定時, pnpm 將拒絕解析除本地 workspace 包含的 package 之外的任何內容。 因此,如果您設置為 "foo": "workspace:2.0.0" 時,安裝將會失敗,因為 "foo@2.0.0" 不存在於此 workspace 中。
當 link-workspace-packages 選項被設定為 false 時,這個通訊協定將特別有用。 這種情況下,只有使用 workspace: 通訊協定聲明依賴,pnpm 才會從此 workspace 連接所需的包。