Renovate 能自动升级 composer.json 依赖,但需显式启用 PHP/Composer 支持。必须配置 "enabledManagers": ["composer"],确保根目录有 composer.json,并正确设置 registryUrls、platform 和 packageRules 等关键项。

Renovate 能不能自动升级 composer.json 里的依赖
能,但默认不启用 PHP/Composer 支持,必须显式开启。Renovate 不是“装上就扫 composer.json”,它把 PHP 当作可选语言生态,默认跳过。你看到依赖没更新、PR 没生成,大概率卡在这一步。
实操建议:
- 在
renovate.json或renovate-config.js中加入"enabledManagers": ["composer"] - 确认项目根目录存在
composer.json(Renovate 不递归扫描子目录) - 如果用 GitHub App,确保权限已开:
Contents(读取代码)、Pull requests(创建 PR) - PHP 项目若混用
package.json和composer.json,Renovate 可能因语言检测逻辑误判为 Node.js 项目,强制加"platform": "github"+"enabledManagers"双保险
为什么 composer update 的结果和 Renovate 提的 PR 不一致
因为 Renovate 不运行 composer update,它只解析 composer.json + composer.lock,再按语义化版本规则模拟升级路径。它不调用 Composer CLI,也不读取本地 ~/.composer/auth.json 或私有仓库配置。
常见错误现象:
- Renovate 提了
monolog/monolog从^2.8升到^3.0,但你本地composer update拒绝——因为composer.json里写了"php": "^8.0",而 monolog 3 要求 PHP 8.1+ - 私有 Packagist 包没被识别:Renovate 默认只查 packagist.org,需手动配
"registryUrls" -
composer.lock锁定版本太老,Renovate 检测到“可升但不兼容”,就静默跳过——它不会强行 break your lock
renovate.json 里哪些 Composer 相关配置最常被漏掉
不是所有字段都生效,Renovate 对 Composer 的支持粒度比 npm/yarn 细,但关键开关少几个就全失效。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
必须配的项(其他可选):
-
"enabledManagers": ["composer"]—— 没这句,整个 PHP 生态不扫描 -
"packageRules"里加"managers": ["composer"]才能针对 PHP 包设策略,比如禁升 major 版本:{"managers": ["composer"], "allowedVersions": ">=2.0.0 -
"rangeStrategy": "bump"或"replace":默认是replace(直接改composer.json的版本字符串),如果你习惯composer require那种带 caret 的写法,得设成"rangeStrategy": "bump" - 想让 Renovate 自动提交
composer.lock更新?得开"lockFileMaintenance": {"enabled": true},否则只改composer.json
Renovate 提的 PR 编译失败,是不是该关掉自动升级
不是。90% 的 CI 失败是因为 Renovate 提的 PR 没触发 composer install --no-interaction,或者锁文件没同步更新。它本身不负责跑测试,只管“改什么”。
排查重点:
- CI 脚本是否仍用
composer install?Renovate 更新后,composer.lock若没进 PR,就会装旧依赖——检查是否开了"lockFileMaintenance"或用了"updateLockFiles": true - GitHub Actions 中是否缓存了
vendor/?缓存未失效会导致装错版本,建议加hash-files: composer.lock做缓存 key - Renovate 默认不开
"automerge",即使测试全过也不会合入。别指望它自动 merge,除非你明确配了"automerge": true和对应条件
最易被忽略的一点:Renovate 解析 composer.json 时,会跳过带变量的版本号,比如 "my/package": "${MY_VERSION}" —— 这种写法它直接无视,既不报错也不升级。

















