使用 Rush.js 时,当未发布的依赖项发生更改时,如何获取已发布的包进行更新?

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

我正在将 rush 与 npm 一起使用,并使用 monorepo 包 A 发布(私下),包 B 则不是。

包 B 是包 A 的依赖项,但我在发布之前的构建阶段使用 Rollup 将它们编译为单个文件。 包 A 中的依赖关系如下所示:

{
  ...
  "dependencies": {
    "@my-org/package-b": "*"
  },
  ...
}

问题

当我更新包 B 时,如何让 Rush 识别出依赖项(包 B)已更新,从而包 A 已有效更改。

  • 有这方面的配置选项吗?
  • 我可以在包 A 的文件没有更改的情况下强制
    rush change
    生成更改文件吗?
dependencies monorepo rush
1个回答
0
投票

我正在将 rush 与 npm 结合使用

首先,我建议将您的 monorepo 迁移到 pnpm - rush 配合它效果更好。

如果使用 pnpm,您的部门将如下所示:

{
  ...
  "dependencies": {
    "@my-org/package-b": "workspace:*"
  },
  ...
}

包 A 已发布(私下),包 B 未发布

我猜,你的

rush.json
文件看起来像这样(如果不是,请确保它包含以下代码):

...
"allowedProjectTags": ["someTag", "theSameTagOrAnotherOne"],

"projects": [
    {
      "packageName": "@my-org/package-a",
      "projectFolder": "path/to/package-a",
      "tags": ["someTag"],
      "shouldPublish": true
    },
    {
      "packageName": "@my-org/package-b",
      "projectFolder": "path/to/package-b",
      "tags": ["theSameTagOrAnotherOne"],
      "shouldPublish": false
    },
    ...
]
...

第一个包

"shouldPublish": true
,第二个包有
"shouldPublish": false
选项来实现您关于发布的话。

重要提示: 确保您已将

node common/scripts/install-run-rush.js change --verify
行添加到
MR CI
Main CI
管道中。如果 soma 包发生更改,但未提供更改日志文件,则此行将使您的管道失败。

当我更新包 B 时,如何让 Rush 识别出依赖项(包 B)已更新,从而包 A 已有效更改。

您还需要为

"shouldPublish": true
设置
package-b

通过上述设置,它应该可以开箱即用:

  1. 您正在更新
    package-b
    并为此包提供更改文件。
  2. Rush.js 理解,
    package-a
    依赖于
    package-b
    ,但
    package-a
    的代码没有改变。因此您不需要提供手动输入的更改文件。
  3. Rush.js 根据
    package-a
    变更类型(主要/次要/补丁)对
    package-b
    进行版本升级,并自行将版本变更记录添加到
    package-a
    变更日志中。

我可以在包 A 的文件没有更改的情况下强制紧急更改生成更改文件吗?

简单的回答是否定的,你不能开箱即用。恕我直言,你并不真的需要它。如果您更改

package-b
并为其提供更改文件,Rush.js 将自动更改
package-a
的版本,将以下记录添加到其变更日志中,并将其包含在应发布的包列表中。但在这种情况下,您不需要为
package-a
更改文件,因为
package-a
的代码没有更改。

自动更新包的示例 -a 包发生更改时的更改日志 -b

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