工作區
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 連接所需的包。