工作空间(Workspace)
pnpm 内置了对单一存储库(也称为多包存储库、多项目存储库或单体存储库)的支持。 你可以创建一个工作空间以将多个项目合并到一个仓库中。
一个工作空间必须在它的根目录有一个 pnpm-workspace.yaml
文件。 工作区在其根目录中也可能有一个 .npmrc
。
提示
如果你正在查看 monorpo 管理,那么你可能还希望查看 Bit。
Bit 在后台使用 pnpm,但将许多当前在由 pnpm/npm/Yarn 管理的传统工作区中手动完成的事情自动化。 有一篇关于 bit install
的文章讨论了这一点:使用 Bit 进行无痛的 Monorepo 依赖管理。
工作空间协议 (workspace:)
如果 link-workspace-packages 设置为 true
,则 pnpm 将在可用包与声明的范围匹配时链接工作区中的包。 例如,如果 bar
在其依赖项中具有 "foo": "^1.0.0"
并且 foo@1.0.0
在工作区中,则 foo@1.0.0
会链接到 bar
。 但是,如果 bar
的依赖项中有 "foo": "2.0.0"
,而工作区中没有 foo@2.0.0
,则会从源中安装 foo@2.0.0
。 这种行为带来了一些不确定性。
幸运的是, pnpm 支持 workspace:
协议。 当使用此协议时,pnpm 将拒绝解析除本地工作空间所包含包之外的任何内容。 因此,如果设置 "foo": "workspace:2.0.0"
,那么此时
安装将失败,因为工作空间中不存在 "foo@2.0.0"
。
当 link-workspace-packages 选项被设置为 false
时,这个协议特别有用。 在这种情况下,如果使用 workspace:
协议,pnpm 将仅链接来自工作区的包。