composer show 是查看已安装包详情的唯一可靠命令,直接读取 vendor/ 目录内容,可查全部包、指定包依赖树或详细元信息;误用 composer list -a 会查命令而非包;show 显示实际安装版本,outdated 比对锁文件与 packagist 判断可升级项。

composer show 查看包详情最直接
想确认某个包装了没、装的什么版本、依赖了谁,composer show 是唯一需要记住的命令。它不查锁文件也不读配置,只看 vendor/ 里真实存在的包,结果最可信。
常见错误是输错包名(比如把 monolog/monolog 写成 monolog),或者漏掉 vendor 目录(执行前确保在项目根目录下)。
- 查所有已安装包:
composer show - 查指定包(含依赖树):
composer show monolog/monolog - 查包的详细元信息(如作者、关键词、autoload 配置):
composer show --all monolog/monolog
composer list -a 找不到包?那是命令用错了
composer list -a 列的是 Composer 自带的命令列表,不是已安装的 PHP 包。很多人搜“composer 查看包”时点进官方文档首页,第一眼看到这个命令就试了,结果返回一堆 install、update —— 和包无关。
真正要查包,只有 show、outdated、depends 这几个命令管用。list 只用来查命令本身。
- 误用现象:
composer list -a | grep monolog→ 空输出,因为根本不在那儿 - 正确替代:
composer show | grep monolog或composer show monolog/monolog - 如果连
show都报错 “Could not open input file”,说明没在 composer.json 所在目录运行
composer show 和 composer outdated 结果为啥不一样
composer show 显示当前 vendor/ 里实际加载的版本;composer outdated 是拿 composer.lock 里的版本去 Packagist 查最新可用版本,再比对——它反映的是「能升但还没升」的状态。
比如你装了 symfony/console v5.4.0,但 Packagist 上已有 v5.4.31,outdated 就会标出来;而 show 只老老实实告诉你现在就是 v5.4.0。
- 想确认线上跑的是哪个版本 → 用
composer show - 想批量检查哪些包该升级了 → 用
composer outdated -
outdated默认跳过 dev 包,加--all才显示phpunit/phpunit这类开发依赖
vendor/autoload.php 被删了,show 还能用吗
能。只要 vendor/ 目录还在,composer show 就不依赖 autoload 文件或任何 PHP 解析过程——它只是读取每个包下的 composer.json 和 installed.json(由 Composer 自己维护)。
但反过来,如果整个 vendor/ 被删了,show 就会报错 “No composer.json found in the current directory”,因为找不到 installed.json 的来源。这时候得先 composer install。
- 常见误操作:CI 脚本里删了 vendor 又立刻跑
composer show→ 失败 - 安全做法:删 vendor 前先存一份
composer show --format=json > installed.json.bak - 注意:
show不校验包是否能正常加载,只管“有没有”。类找不到是 autoload 或 PSR-4 配置问题,不是show的责任
show 就静默失败,而不是报错提醒。










