Skip to content
返回维护与 LTS

依赖更新策略

在 Renovate、Dependabot、手动或无之间选择 — 并配置胜者匹配你的风险胃口。

为什么

更新工具的选择比任何策略文档更决定升级节奏,因为工具才是实际开 PR 的。Dependabot 内置于 GitHub 且简单但有限(一个生态、无分组、无 Action 不能自动合并)。Renovate 是独立 app/bot 但强大得多:分组相关更新、全绿自动合并、支持 50+ 生态、有可版本化的 JSON 配置。选错工具意味着要么淹没在 200 个独立 PR 中(Dependabot 默认)要么无自动化(手动)。策略是 >10 依赖的仓选 Renovate 并配置分组 + patch/minor 自动合并。

何时使用

新建仓时或当前工具的 PR 量不可控时。每年重评。

如何做

1. 盘点生态:npm?pip?cargo?go?— 选覆盖全部的工具
2. 比较:Renovate(强大、分组、自动合并、50+ manager)vs Dependabot(简单、GitHub 原生)
3. >10 依赖或多生态选 Renovate;微小单生态仓选 Dependabot
4. 配置分组:所有 patch+minor 合并成一个每周 PR;major 各自一个 PR
5. 配置自动合并:patch+minor 全绿 CI 自动合并;major 需人工审查
6. 加 ignoreDeps 列表给已审查钉死的高风险包
7. 定计划:"周一早 6 点前"使升级落在可预测低流量窗口
8. 监控:bot 被阻塞 >3 天则告警(失败 PR 意味债务在增)

示例

# renovate.json — 推荐配置
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": ["config:recommended"],
  "schedule": ["before 6am on Monday"],
  "packageRules": [
    {
      "matchUpdateTypes": ["patch", "minor"],
      "groupName": "non-breaking",
      "automerge": true,
      "automergeType": "pr"
    },
    {
      "matchUpdateTypes": ["major"],
      "labels": ["needs-review"],
      "dependencyDashboardApproval": true
    },
    {
      "matchPackageNames": ["typeorm"],
      "enabled": false
    }
  ]
}
# Dependabot 回退(.github/dependabot.yml)— 无分组、无自动合并:
#   schedule: weekly, open-pull-requests-limit: 10

常见问题

  • ⚠用 Dependabot 默认每周 50 个独立 PR — 审查者产生横幅盲视不再合并。
  • ⚠major 也自动合并 — 通过 CI 但运行时破坏(行为变更)的 major 未经审查进生产。
  • ⚠无计划 — bot 随机开 PR,包括发布冻结期或周五下午。

最佳实践

  • ✓用 Renovate 分组:patch+minor 一个每周 PR,major 各自 PR — 平衡噪声与可审查性。
  • ✓绝不自动合并 major;每个 major 需人工 changelog 审查和 staging 部署。
  • ✓给 bot 定计划并设 dependency-dashboard,使阻塞 PR 可见不悄悄腐烂。