composer show 默认只显示顶层依赖,加 --tree 查完整依赖树,加包名查详细信息,--format=plain 输出纯文本格式便于脚本解析,未成功安装或在 require-dev 中且启用 --no-dev 时则不可见。

直接运行 composer show 就能列出所有已安装的包及其版本,但默认只显示顶层依赖;想看完整依赖树或精确查某个包的版本,得加参数或换命令。
查看全部已安装包(含依赖)
不加任何参数的 composer show 只显示 composer.json 里直接声明的包,不会递归展开 vendor/ 里的间接依赖。要看到整个依赖图,必须加 --tree:
composer show --tree
这个输出会按层级缩进展示依赖关系,比如 monolog/monolog 下面跟着它依赖的 psr/log。注意:如果项目依赖极深,输出可能很长,建议配合 grep 过滤,例如:
composer show --tree | grep "guzzle"
精确查询某个包的详细信息
用 composer show 加包名,能查到该包的当前安装版本、描述、许可证和依赖项。例如:
composer show symfony/http-foundation
关键点:
- 包名必须拼写完全正确,大小写敏感(如
symfony/console≠Symfony/Console) - 如果包未安装,会报错:
Package not found: symfony/http-foundation - 输出中
versions行显示的是实际安装的版本号(可能是dev-main、v6.4.0或带-dev后缀的提交哈希)
只列出包名和版本(适合脚本解析)
加 --format=plain 可以去掉颜色和额外字段,每行一个 vendor/name version,方便管道处理:
composer show --format=plain
输出示例:
doctrine/annotations v1.14.3 monolog/monolog 3.5.0 phpunit/phpunit 10.5.12
这种格式适合在 CI 脚本里做版本校验,比如检查是否用了特定安全补丁版本。注意:--format=json 也能用,但 JSON 输出包含嵌套结构,解析成本更高。
为什么 composer show 查不到刚 require 的包?
常见错误是运行了 composer require xxx 但没成功执行完——比如中途 Ctrl+C 中断,或网络失败导致 vendor/ 没更新。此时 composer show xxx 会提示包未找到,而 composer show 列表里也没有它。解决方法只有两个:
- 重新运行
composer require xxx,确保终端末尾出现Installing xxx (x.x.x)和Generating autoload files - 或手动检查
vendor/composer/installed.json,确认该包是否出现在里面
另外,如果项目启用了 composer install --no-dev,而包被声明在 require-dev 里,那它也不会出现在 show 结果中——这点容易被忽略。










