使用Rush.js时,未发布依赖更新后如何触发已发布包更新?
Rush.js 单体仓库依赖更新识别与变更文件生成方案
问题背景
我使用Rush.js搭配npm管理单体仓库,其中Package A为私有发布包,Package B为未发布包。Package B是Package A的依赖,发布前会通过Rollup将二者编译为单个文件,Package A的依赖配置如下:
{ ... "dependencies": { "@my-org/package-b": "*" }, ... }
当更新Package B后,需要让Rush识别到该依赖已更新,从而判定Package A实际已变更,并解决两个具体问题:是否有对应配置选项、能否强制生成变更文件。
1. 是否存在对应的配置选项?
有两种核心配置方式可以让Rush识别Package B的变更对Package A的影响:
- 改用Workspace协议声明依赖:将Package A的
package.json中依赖改为"@my-org/package-b": "workspace:*",Rush会自动关联本地Package B的变更,在执行rush change或rush build时识别到Package A的依赖更新。 - 配置循环依赖关联:在
rush.json的projects数组中,给Package A添加cyclicDependencyProjects字段,指定关联的Package B:
这样当Package B有变更时,Rush会将Package A标记为受影响的项目,后续的构建、变更检测流程会自动处理。{ "projects": [ { "packageName": "@my-org/package-a", "projectFolder": "packages/package-a", "cyclicDependencyProjects": ["@my-org/package-b"] }, ... ] }
2. 能否在Package A文件未变动时,强制rush change为其生成变更文件?
可以,直接使用rush change的强制指定包参数:
rush change -f @my-org/package-a
执行该命令后,即使Package A的本地文件没有修改,Rush也会弹出交互窗口,让你为Package A填写变更说明并生成对应的变更文件。如果需要自动化处理,也可以结合脚本,在Package B的变更提交后自动触发该命令。
内容的提问来源于stack exchange,提问作者Tom Benyon
相关产品推荐
相关产品推荐

