pnpm -- 同步依赖项的版本

问题描述 投票:0回答:1

假设我对 Javascript monorepo 有以下限制

-- module a
   package.json
-- module b
   package.json
package.json

模块 A 和模块 B 都依赖于 lodash。

使用pnpm,有什么方法可以确保它们都使用相同版本的lodash?就像在根目录中安装 lodash 并说“使用工作空间根目录中的任何版本”?

附注我知道 pnpm 允许 或 工作区,但根据我的理解(这可能是错误的),只有当依赖项已经是 monorepo 中的模块时才使用它 - 不适用于第 3 方依赖项。

monorepo pnpm
1个回答
9
投票

您可以使用项目根目录下

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
无法提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.