假设我对 Javascript monorepo 有以下限制
-- module a
package.json
-- module b
package.json
package.json
模块 A 和模块 B 都依赖于 lodash。
使用pnpm,有什么方法可以确保它们都使用相同版本的lodash?就像在根目录中安装 lodash 并说“使用工作空间根目录中的任何版本”?
附注我知道 pnpm 允许 或 工作区,但根据我的理解(这可能是错误的),只有当依赖项已经是 monorepo 中的模块时才使用它 - 不适用于第 3 方依赖项。
您可以使用项目根目录下
overrides
中的 package.json
字段来实现此目的。
https://pnpm.io/package_json#pnpmoverrides
{
"pnpm": {
"overrides": {
"lodash": "4.17.20"
}
}
}
这将为工作区中依赖它的所有包强制使用
lodash
的版本。
Yarn 中也存在类似的功能,称为
resolutions
。显然存在一些差异,尽管我不熟悉具体细节。 该功能已添加至此处。
如果 syncpack
解决方案不适合您,您也可以尝试
overrides
。在我的组织中,对于仅由我们的 monorepo 包请求依赖项的问题,我们正在慢慢转向 syncpack
;这样做的理由是随着时间的推移积累了太多的覆盖。
但是为了确保依赖的依赖版本,
overrides
仍然是你所需要的。
例如如果您安装
react-dom
并且它依赖于 scheduler
并且由于某种原因您需要特定版本的 scheduler
,那么 overrides
方法是您唯一的选择 - syncpack
无法提供帮助。