composer本身不支持自动更新提醒,需通过post-update-cmd钩子、update-helper插件、composer-versions-check插件或ci/cd流程实现;其中钩子最轻量,插件侧重风险预警,ci/cd最可靠。

Composer 本身不支持“自动更新提醒”,所谓提醒必须靠外部机制触发;它不会主动扫描、比对或推送,所有提示行为都得你明确配置脚本、插件或接入 CI/CD 流程。
post-update-cmd 钩子是最轻量的提醒落地方式
在 composer.json 的 "scripts" 字段里加 post-update-cmd,是本地开发中最直接可控的提醒路径:
- 只在
composer update(含--lock)后执行,install不会触发 - 命令按顺序执行,任一失败(比如
curl超时)会导致后续中断;非关键操作建议末尾加|| true - 可用环境变量判断上下文:
$COMPOSER_EVENT恒为post-update-cmd,$COMPOSER_COMMAND可区分是update还是update --lock - 避免在钩子里调用
composer install或其他可能递归触发钩子的操作,否则会死循环
示例:
"scripts": {
"post-update-cmd": [
"echo '[$(date)] composer update done on $(hostname)' >> /tmp/composer-notify.log",
"curl -s -X POST -H 'Content-Type: application/json' -d '{\"text\":\"⚠️ Dependencies updated: $(git rev-parse --short HEAD)\"}' https://hooks.slack.com/services/XXX || true"
]
}
kylekatarnls/update-helper 插件适合风险前置预警
这个插件不是“通知更新发生了”,而是“在更新前告诉你可能出什么问题”,更适合对稳定性要求高的项目:
- 安装后默认在
post-autoload-dump阶段运行,即每次update或install后都会检查 - 能识别语义化版本跃迁(如
^1.9→^2.0),并提示是否需迁移代码、配置或 PHP 版本 - 支持交互式升级:
$helper->getIo()->askConfirmation()可让用户确认是否自动改composer.json - 自定义类必须实现
UpdateHelperInterface,且check()方法里调用$helper->write()才会输出提示
注意:插件不替代 post-update-cmd,它不发 Slack/邮件,只做终端内警告和建议。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer-versions-check 插件专注“主版本更新提示”
如果你只想知道哪些包有 v2、v3 等主版本可升(而非补丁或次版本),这个插件更聚焦:
- 安装即生效,无需额外
scripts配置 - 只对比
composer.lock中已安装版本与 Packagist 上最新主版本(如当前是1.8.5,发现2.1.0已发布,就提醒) - 输出带链接:
symfony/console v6.4.0 → v7.0.0 (https://github.com/symfony/console/releases/tag/v7.0.0) - 不修改任何文件,也不阻断流程,纯信息型提示
它和 update-helper 是互补关系:后者防踩坑,前者促进化。
CI/CD 中做差异驱动提醒才真正可靠
本地钩子容易被 --no-scripts 跳过,而 CI 环境能确保逻辑稳定执行:
- GitHub Actions 示例:用
git diff --name-only HEAD~1 composer.lock判断是否有变更,仅当有改动才触发通知 - GitLab CI 可结合
only: changes规则,精准匹配composer.lock修改 - 通知内容可包含 diff 行数、新增/移除包列表,甚至调用
composer audit补充安全风险 - 密钥(如 Slack Webhook URL)统一走 CI secrets,不硬编码在
composer.json里
真正复杂的地方在于:提醒本身不难,难的是判断“该不该提醒”——是所有更新都报?还是只报主版本?是否过滤 dev-only 包?这些逻辑放在 CI 里比塞进 Composer 钩子更清晰、更易维护。










