是否可以在 nx / lerna monorepo 中更改版本而不覆盖依赖项中的 * 项目引用?

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

假设我有一个 nx/lerna monorepo,有两个项目 A 和 B,其中 A 依赖于 B。所以 package.json-s 看起来像这样

{
  "name": "A",
  "version": "1.2.3",
...
  "dependencies": {
     "B": "*"
  }
}

{
  "name": "B",
  "version": "1.2.3",
...
}

当我运行

npx lerna version 1.2.4
时,该命令会覆盖我的无版本引用,即A的package.json变成

{
  "name": "A",
  "version": "1.2.4",
...
  "dependencies": {
     "B": "^1.2.4"
  }
}

虽然我希望它成为

{
  "name": "A",
  "version": "1.2.4",
...
  "dependencies": {
     "B": "*"
  }
}

是否有一个参数可以让

*
保持独立?

package.json lerna nx-monorepo
1个回答
0
投票

您应该使用

workspace:
协议,Lerna 和 Lerna-Lite 都支持它。在包管理器方面,该协议由 Yarn 和 pnpm 包管理器支持(npm 尚不支持),例如,查看 pnpm workspace: 文档,如果您继续使用
workspace:*
,那么当然,除了发布时,因为必须使用真实版本号,否则
workspace:*
保持不变(您也可以使用
^
~
代替
*
,但后者更常见使用)。

该协议的另一个优点是,它将始终使用本地包副本(或实际上的符号链接),而不是总是首先尝试从 npm 下载它(这就是

*
所做的),另一个很大的好处是锁文件永远不会更改与
workspace:*
的依赖关系,因为这是保存在锁定文件中的内容(同样,只有在发布时,真正的版本号才会向库的外部用户显示)。

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