composer show 命令用于精准查询单个包信息:需全写 vendor/package-name;加 -s 查 autoload/scripts;加 --tree 查依赖树;加 --all 查所有远程版本;结果依赖 lock 文件与本地缓存。

直接查包详情:用 composer show vendor/package-name
想看某个包装了没、装的是哪个版本、依赖谁、autoload 怎么配的,就用这个命令。它不是“列出所有包”的工具,而是“精准查一个包”的入口。
- 必须写全
vendor/package-name,比如monolog/monolog,漏掉monolog/或大小写写错(Monolog/Monolog)都会报Package not found - 输出里
versions行显示的是当前安装的版本(可能是v3.5.0、dev-main或带 commit hash 的 dev 版),不是最新版 - 如果包只在
require-dev里,且你运行过composer install --no-dev,那它就不在已安装列表里,composer show会查不到
看 autoload 和 scripts 配置:加 -s 参数
类找不到、自定义命令执行失败,八成是 autoload 映射或 scripts 脚本配置不对。-s(即 --show-config)能把这些关键字段展开,比翻 composer.json 或源码快得多。
-
composer show -s monolog/monolog会输出autoload字段,比如"Monolog\": "src/",说明MonologLogger对应vendor/monolog/monolog/src/Logger.php - 这个选项在 Composer 2.2+ 才稳定支持;旧版本会提示
unrecognized option,别硬试 -
scripts里列的命令(如post-install-cmd)也能看到,方便确认钩子是否被正确注册
查依赖树:用 --tree 看清谁拉进来、为什么冲突
composer show 不加参数只列顶层依赖,而 --tree 才能还原真实安装结构——这是排查“为什么装了两个不同版本的 psr/log”的唯一可靠方式。
-
composer show --tree laravel/framework输出是缩进树,例如:laravel/framework v10.48.12<br>└── symfony/console v6.4.7<br> └── psr/log 3.0.0
- 注意:它只展示当前 lock 文件里已解析出的路径,如果某包只在
require-dev且你用了--no-dev,就不会出现在树中 - 输出太长时,直接管道过滤:
composer show --tree | grep "guzzle",比手动滚动快
查所有可用版本:用 --all(不是 -a)并注意缓存
想知道有没有新版本可升、某个旧版是否还被支持,就得查远程所有候选版本。但默认 composer show vendor/package 只返回本地缓存过的版本,容易漏掉刚发布的 tag。
- 必须用
--all(双横线),-a是无效别名,会被忽略 -
composer show --all guzzlehttp/guzzle会实时请求 Packagist API,返回完整versions列表,含dev-main、3.0.x-dev、v7.9.0等 - 没有
jq时,用grep "versions" | cut -d: -f2提取版本号很脆弱——字段可能换行,建议优先装jq:composer show --all --format=json guzzlehttp/guzzle | jq -r '.versions | join(" ")'
最常被忽略的一点:所有 composer show 命令都依赖 composer.lock 和本地缓存,它不告诉你“这个包什么时候发布的”,也不反映“现在网络上最新版是不是真兼容你的 PHP”。查完版本,还得自己验证兼容性。










