composer show 默认只显示 composer.json 中直接声明的已安装包,按包名排序,格式为 vendor/name → version,不包含嵌套依赖;查完整依赖树需加 --tree,查单个包用 composer show vendor/name,全局包则用 composer global show。

直接运行 composer show 能看到什么?
它只列出 composer.json 里 require 和 require-dev 明确声明的包,也就是“你亲手写的依赖”,不包括它们悄悄带进来的嵌套依赖(比如 laravel/framework 拉来的 symfony/http-foundation)。
这个行为常被误认为“没装全”,其实不是漏装,是默认不展开。
- 输出按包名字母排序,每行格式为
vendor/name → version - 不显示描述、作者、路径等细节,除非加
-v或--verbose - 如果某包在
composer.json里但还没install,它不会出现——show只读vendor/composer/installed.json,不查composer.lock
怎么查完整依赖树(含所有间接包)?
必须加 --tree(或简写 -t),否则永远看不到被二级、三级依赖带进来的包:
-
composer show --tree:缩进式树形结构,层级一目了然 -
composer show --tree | grep monolog:快速定位某个包在哪一层被引入 -
composer show --tree > deps-tree.txt:导出存档,方便后续比对或审计
注意:--tree 仍基于已安装状态,如果某个间接依赖因冲突未安装成功,它也不会出现在树里——这和 composer install --dry-run 的预估逻辑不同。
查单个包的版本和依赖关系用哪个命令?
直接跟包名:composer show vendor/name,比如:
-
composer show guzzlehttp/guzzle:显示已安装版本、requires、requiredby、autoload 配置 -
composer show guzzlehttp/guzzle --remote:跳过本地,查 Packagist 上最新版信息(适合升级前确认) -
composer show guzzlehttp/guzzle -a:列出该包所有可用版本(含 alpha/beta),方便选稳定分支
常见错误:输错包名后没报错,而是返回空——因为 Composer 把它当成了模糊搜索关键词,结果没匹配到任何已安装包。建议先用 composer show | grep -i xxx 确认拼写。
全局安装的包怎么查?
项目级命令不适用,得换 composer global show:
-
composer global show:查全局~/.composer/vendor/下所有包 -
composer global show --direct:只看你自己global require过的,排除它们的子依赖 - 全局包路径通常不在
$PATH里,查完记得确认是否已软链或添加路径,否则终端找不到命令
容易忽略的一点:全局命令受当前用户权限限制,如果你用 sudo composer global require,后续 global show 可能看不到——因为写入的是 root 的 ~/.composer,而你普通用户读的是自己的目录。










