工作空间(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 将仅链接来自工作区的包。