运行 composer outdated --all 可查看全量可升级依赖,加 --direct 仅显示直接依赖,--security-only 结合安全插件检测 cve,--minor-only 过滤小版本更新,ci 中推荐 composer outdated --direct --no-dev --minor-only --format=json 输出结构化数据。

怎么用 composer outdated 快速发现过时依赖
直接运行 composer outdated 就能看到所有可更新的包,包括主版本、次版本、补丁级更新。默认只显示语义化版本中「安全可升」的更新(比如 ^2.1.0 允许升到 2.9.0 但不会跨到 3.0.0),这容易让人误以为没风险——其实很多安全漏洞就藏在 2.x 的旧小版本里。
真正要查全量可升级项,得加 --all 参数:composer outdated --all。如果还想看哪些包有已知 CVE,加上 --security-only(需先配置安全插件)。
- 不加
--direct时会列出所有传递依赖,信息量大但干扰多;日常巡检建议加--direct只看你自己require的包 -
composer outdated --minor-only能过滤出仅小版本更新的包,适合想保守升级的场景 - CI 中自动检查时,推荐用
composer outdated --direct --no-dev --minor-only --format=json输出结构化数据,方便解析和告警
为什么 composer update 经常升级出问题
composer update 默认按 composer.json 中的版本约束拉最新匹配包,但实际行为受 composer.lock 和本地缓存双重影响。最常见问题是:明明改了 composer.json 的版本号,执行后却没生效——因为 composer.lock 锁死了旧版本,而 update 没指定具体包名,Composer 会跳过“已满足约束”的条目。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 想强制更新某个包(比如
monolog/monolog),必须写全名:composer update monolog/monolog,否则它可能被忽略 - 升级前务必确认 PHP 版本兼容性,例如
phpunit/phpunit ^9.5在 PHP 8.2 下没问题,但^8.5会报ParseError - 某些包(如
symfony/*)存在隐式互斥约束,单独升级一个可能触发依赖冲突,这时得用composer update symfony/console symfony/framework-bundle --with-all-dependencies
如何用 composer audit 做基础安全扫描
composer audit 是 Composer 2.5+ 内置命令,底层对接 packagist.org 的安全公告数据库。它不扫描代码,只比对已安装包的版本是否在已知漏洞列表中。速度很快,但覆盖有限——只包含 Packagist 官方收录的 CVE,不涵盖自建私有包或未上报漏洞。
- 首次使用前确保已登录:
composer login(非必需但能提升响应速度) - 默认只检查
require区块,加--dev才扫require-dev,而很多测试工具链漏洞(如phpunit插件)就在这里 - 输出中的
critical级别漏洞必须立即处理;high级别要看是否实际调用到对应路径,比如guzzlehttp/guzzle的 DNS 重绑定漏洞,若项目完全不用异步 HTTP 请求,风险就低
依赖治理不能只靠命令行,得固化进流程
人工跑几次 outdated 或 audit 解决不了持续腐化。真正的治理点在于:把检查变成 CI 的必过门禁,并让修复成本足够低。
- GitHub Actions 中加一步:
composer audit --no-dev || exit 1,失败即阻断 PR 合并 - 用
composer normalize(需装ergebnis/composer-normalize)统一composer.json格式,避免因空格或排序差异导致锁文件无谓变更 - 私有包无法被
audit覆盖?那就定期导出依赖树:composer show --tree --no-dev | grep -E "^[a-z]" > deps-tree.txt,配合内部 SCA 工具做离线扫描
最常被忽略的是 dev 依赖的生命周期管理——它们不进生产环境,但可能污染构建镜像、拖慢 CI、甚至成为攻击入口。治理时别只盯着 require。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










