用途
Dependabot 自动创建的依赖升级 PR 存在两个常见问题:它只修改一个 package.json,而不会运行 bun install,因此 bun.lock 文件会与依赖声明不一致;同时 monorepo 中其他包仍然引用旧版本。本技能用于修正这两个问题,使依赖升级在整个仓库内保持一致。
主要能力
- 读取 Dependabot PR 信息,确定分支名、被升级的依赖以及新旧版本。
- 检出该 PR 对应的分支。
- 在 monorepo 的所有 package.json 中查找并更新同一依赖的旧版本,保留各包原有的版本前缀风格(^、~ 或精确版本)。
- 从仓库根目录运行 bun install,重新生成 bun.lock。
- 验证改动范围,仅允许 bun.lock 和预期的 package.json 文件被修改。
- 提交并推送更改,然后切回之前的分支。
使用方式
技能按以下步骤执行:
-
获取 PR 信息——使用 gh pr view <number> --json headRefName,files,title,body 识别分支名、被升级的依赖以及新旧版本。
-
检出分支:
git fetch origin <branch> git checkout <branch>
-
更新所有 monorepo 实例——搜索所有引用同一依赖旧版本的其他 package.json:
rg '"<dependency>": "[~^]?<old-version>"' --glob '**/package.json'
将每个匹配项更新为新版本,并保留各包已有的前缀风格(^、~ 或精确版本)。
-
从仓库根目录运行 bun install 以重新生成 bun.lock。
-
验证——运行 git status,确认只有 bun.lock 和预期的 package.json 文件被修改。如果出现其他意外文件变更,需先调查再继续。
-
提交并推送:
git add -u git commit -m "Update <dependency> to <version> across all monorepo packages" git push
-
切回原分支——返回之前的分支(通常是 main):
git checkout main
适用场景
适用于使用 bun 作为包管理器的 monorepo 项目,当 Dependabot 提交了依赖升级 PR,需要同步更新锁文件和仓库内其他包中同一依赖的版本时。
限制与注意事项
- 对于主版本升级(例如 vite 5 → 6),应先评估升级是否合适或是否应忽略,并检查破坏性变更。
- 如果 bun install 失败,可能是该依赖版本与其他包存在冲突。此时应关闭 PR 并评论说明原因。
- Dependabot 提示“只要你不自行修改,Dependabot 会解决此 PR 的任何冲突”,但更新锁文件和同级包属于预期工作流,不会造成问题。