我正在将 rush 与 npm 一起使用,并使用 monorepo 包 A 发布(私下),包 B 则不是。
包 B 是包 A 的依赖项,但我在发布之前的构建阶段使用 Rollup 将它们编译为单个文件。 包 A 中的依赖关系如下所示:
{
...
"dependencies": {
"@my-org/package-b": "*"
},
...
}
问题
当我更新包 B 时,如何让 Rush 识别出依赖项(包 B)已更新,从而包 A 已有效更改。
rush change
生成更改文件吗?我正在将 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
。
通过上述设置,它应该可以开箱即用:
package-b
并为此包提供更改文件。package-a
依赖于 package-b
,但 package-a
的代码没有改变。因此您不需要提供手动输入的更改文件。package-a
变更类型(主要/次要/补丁)对 package-b
进行版本升级,并自行将版本变更记录添加到 package-a
变更日志中。我可以在包 A 的文件没有更改的情况下强制紧急更改生成更改文件吗?
简单的回答是否定的,你不能开箱即用。恕我直言,你并不真的需要它。如果您更改
package-b
并为其提供更改文件,Rush.js 将自动更改 package-a
的版本,将以下记录添加到其变更日志中,并将其包含在应发布的包列表中。但在这种情况下,您不需要为 package-a
更改文件,因为 package-a
的代码没有更改。