composer show 只能显示已安装包的名称、版本和描述,无法识别安全漏洞、php兼容性问题、废弃状态或循环依赖;真正依赖体检需用 composer audit 或第三方工具。

composer show 能看出哪些依赖问题?
它只列出已安装的包及其版本,不检查安全性、兼容性或废弃状态。真正做「体检」得用 composer audit(Composer 2.5+)或第三方工具。
常见误判场景:项目用了 monolog/monolog v1.25.0,composer show 显示正常,但该版本有 CVE-2021-31179;composer audit 才会标红提示。
-
composer show --outdated只比对 packagist 最新稳定版,忽略minimum-stability设置导致的“看似可升级实则被锁死” -
composer show -t显示依赖树,但不会高亮循环引用——得靠composer validate --with-dependencies配合手动排查 - 私有包若未在
repositories中正确定义,composer show仍会显示,但实际加载时可能报Package not found
composer audit --format=json 输出里关键字段含义
这是 Composer 官方内置的安全扫描命令,依赖 Composer Security Advisory Database,不是调 GitHub API。
执行后 JSON 输出中重点关注:advisories 数组里的 title、cve、severity 和 affectedVersions。注意:severity 值为 critical 或 high 才真要立刻处理。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 如果输出为空数组
{"advisories":[]},不代表绝对安全——仅说明当前已安装版本不在已知漏洞库中 -
composer audit --ignore=psr/log可临时忽略某包,但忽略项不会写入composer.json,下次 audit 依然会报 - CI 环境中建议加
--no-dev,避免开发依赖(如phpunit/phpunit)的漏洞干扰生产环境判断
换镜像源后 composer update 为什么反而装不上包?
国内镜像(如阿里云、腾讯云)同步的是 packagist.org 的元数据快照,不是实时镜像。一旦上游删包、改 license 或强制重定向,镜像可能滞后数小时甚至更久。
典型现象:composer require laravel/framework:^10.0 报错 Could not find package laravel/framework in a version matching "10.0",但 packagist.org 页面明明存在——大概率是镜像尚未同步该版本的 composer.json 元数据。
- 临时方案:加
-vvv参数看 Composer 实际请求的 URL,确认是否命中镜像域名;再访问对应镜像的/packages.json查看 lastUpdated 时间戳 - 稳妥做法:用
composer config --global repo.packagist composer https://packagist.org切回官方源验证是否真有问题 - 镜像配置写在
composer.json的repositories里时,必须把packagist.org设为false,否则 Composer 仍会 fallback 查询官方源,造成行为不一致
为什么 vendor/autoload.php 加载失败和依赖体检无关?
这属于运行时环境问题,不是依赖健康度问题。常见诱因是 composer install 未完成、vendor 目录被误删,或 autoload 配置写错路径。
比如 composer.json 里写了 "autoload": {"psr-4": {"App\": "src/"}},但实际类文件放在 app/ 下,composer dump-autoload 不会报错,但运行时 new AppSomeClass() 就会触发 Class not found。
-
composer validate只校验 JSON 结构和基础字段,不检查 autoload 路径是否存在 -
composer dump-autoload --no-dev生成的 autoloader 缺少测试类映射,但不影响主逻辑——别把它当成体检失败信号 - 若用 Docker,注意
vendor目录权限和 UID/GID 匹配问题,composer install在容器内跑完后宿主机直接运行 PHP 文件,可能因权限拒绝读取autoload.php










