如何配置Manifest驱动的Release-Please更新Monorepo依赖及package-lock.json
在Monorepo中用Release-Please同步更新依赖包及lock文件
可以通过配置实现需求,核心是启用Release-Please的依赖更新功能,并补充lock文件的自动更新逻辑,具体步骤如下:
1. 配置Release-Please跟踪所有相关包
在根目录的release-please-config.json中,将被更新的工具包和引用它的启动项目都加入packages配置,并开启依赖更新:
{ "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", "manifest-file": ".release-please-manifest.json", "release-type": "node", "dependency-updates": true, "packages": { "packages/hello-world-util": {}, "starters/nestjs-startup-app": {} } }
同时确保.release-please-manifest.json包含所有这些包的当前版本:
{ "packages/hello-world-util": "1.0.0", "starters/nestjs-startup-app": "1.0.0" }
2. 确保子项目依赖声明正确
在starters/nestjs-startup-app/package.json中,正确声明对内部包的依赖,包名需与packages/hello-world-util/package.json中的name字段完全一致:
{ "dependencies": { "@your-org/hello-world-util": "^1.0.0" } }
3. 自动更新根目录package-lock.json
Release-Please不会自动运行npm install更新lock文件,需通过以下方式之一实现:
方法一:使用Release-Please的post-upgrade脚本
- 在根目录创建
scripts/update-lockfile.sh脚本,赋予执行权限:
#!/bin/bash set -e npm install git add package-lock.json
- 在
release-please-config.json中指定该脚本:
{ // 保留原有配置 "post-upgrade": "./scripts/update-lockfile.sh" }
Release-Please在更新所有package.json版本后,会自动执行该脚本,将lock文件的变更纳入同一个PR。
方法二:在GitHub Action Workflow中添加步骤
修改Release-Please的Action配置,在PR创建后更新lock文件并推送:
jobs: release-please: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 - uses: google-github-actions/release-please-action@v4 id: release with: command: manifest - if: steps.release.outputs.pr_created == 'true' run: | npm install git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add package-lock.json git commit -m "Update package-lock.json to match dependency versions" git push
4. 验证效果
提交配置后,当packages/hello-world-util有符合Release-Please规则的变更时,工具会生成包含以下内容的PR:
- 更新
packages/hello-world-util/package.json的版本号 - 更新
starters/nestjs-startup-app/package.json中对应依赖的版本号 - 更新根目录的
package-lock.json
合并该PR后,即可直接执行npm publish,不会因依赖版本不匹配导致构建失败。
内容的提问来源于stack exchange,提问作者Zaker
相关产品推荐
相关产品推荐

