composer install不检查过期或不安全包,因它仅按composer.lock安装、不联网校验版本或漏洞;真正风险排查需组合执行composer audit(查CVE)、outdated --all(显所有可升级包及BC-breaking标记)和update --dry-run -v(预览实际升级影响)。

composer install 本身不检查过期或不安全包,它只按 composer.lock 安装——想排查风险,得换命令、加组合动作。
composer install 为什么查不出过期包?
它完全信任 composer.lock:只要锁文件里版本固定,哪怕该包已发布含 CVE 的新版,composer install 也照装不误。它不联网查元数据,也不比对 Packagist 最新版本。
- 锁文件没提交?本地
composer install可能装出和 CI 不一致的版本,但依然不预警 - 锁文件里是
dev-main?install 能跑通,但composer outdated可能把它标为“假过期”,因 Packagist 不视其为稳定版本 - 包已被弃用(abandoned)?install 不报错,但
composer outdated仍会列出,需人工点进 Packagist 页面确认顶部是否有DEPRECATED标识
真正有效的排查组合:audit + outdated --all + dry-run
单靠 composer install 没法排查,必须主动触发三步验证:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer audit:查真实漏洞,基于 FriendsOfPHP/security-advisories 数据库,返回Critical/High级别问题,CI 中应检查退出码是否非零 -
composer outdated --all:暴露所有可升级点,包括require-dev和传递依赖(如psr/log),带!的行表示已知 BC-breaking,必须查 CHANGELOG -
composer update --dry-run -v:看 Composer 实际打算怎么动——是否要降级、是否触发 conflict、哪些间接依赖会被连带更新;比outdated更接近真实升级后果
容易被忽略的“漏报”场景
以下情况会让风险藏得更深,光跑命令也不一定抓出来:
-
composer.lock里某个包版本虽旧,但它的上游包(比如symfony/console)已通过conflict字段屏蔽了该旧版——此时audit可能不报,但实际运行时可能出兼容问题 - 包被
replace掉了(如"replace": {"monolog/monolog": "*"}),outdated不会扫它,但你代码里若还显式use Monolog\Logger,就可能 runtime error - 私有源包没配
repositories或认证失效,composer show vendor/package报no matching package found,但install因依赖锁文件仍成功——这种包的“过期”状态根本无法被检测
真正要落地排查,不能只盯着 install 命令;得把 audit 当安检仪,outdated --all 当地图,update --dry-run 当沙盒——三者缺一不可,且每次结果都要人工交叉比对。

















