composer show 默认列出已安装包的名称和版本,指定包名可查详情(含依赖关系),加 -a 参数查远程包信息,支持通配符匹配但不支持正则,显示版本以 composer.lock 为准。

composer show 能查到哪些包信息
直接运行 composer show 列出当前项目所有已安装包的名称和版本,但不显示详细描述或依赖关系。真正要看详情,得指定包名,比如 composer show monolog/monolog —— 它会输出包的版本、描述、关键词、homepage、license、autoload 配置,以及它依赖了哪些其他包(require)和被哪些包依赖(required by)。
注意:这个命令查的是 vendor/ 里实际安装的包,不是 composer.json 里声明但还没 install 的包;如果包没装上,会提示 Package not found。
查远程包(未安装)用 -a 或 --all
想看 packagist.org 上某个包的最新稳定版、支持的 PHP 版本、是否弃用(abandoned)、有没有替代包,得加 -a 参数:composer show -a guzzlehttp/guzzle。这会绕过本地 vendor,直接查仓库元数据。
常见误操作是漏掉 -a 还以为能查到远程版本号——其实不加就只查本地已安装的,没装就是报错。
-
-a会触发网络请求,慢一点,且受 packagist 响应影响 - 如果包在 private repository,需确保
composer config已正确配置源 - 某些包标记为
abandoned,composer show -a会在输出末尾明确写出替代包名,比如symfony/http-foundation替代symfony/http-kernel的旧用法
用正则或通配符批量查包
composer show 支持 shell 风格通配符,比如 composer show "laravel/*" 查所有 laravel 官方包,composer show "symfony/*" | grep -E "(4\.|5\.)" 筛选特定主版本。
但要注意:通配符必须用英文双引号包裹,否则 shell 可能提前展开(尤其在 Windows PowerShell 或 zsh 下容易出错);单引号在某些 shell 下会导致通配符失效。
- 不支持 PCRE 正则,只认
*和? -
composer show "monolog/*"不会递归查子命名空间,只匹配一级,比如monolog/monolog可以,monolog/php-handler就不行(后者不是真实包名) - 结果按字母序排列,没法按安装时间或依赖深度排序
为什么 composer show 显示的版本和 composer.json 不一致
最常见原因是 composer.lock 已锁定版本,而 composer.json 里写的是约束(如 "^2.0"),composer show 显示的是 lock 文件里记录的实际安装版本,不是约束表达式本身。
另一个情况是用了 composer require --no-update,此时 composer.json 已改但 vendor 没更新,composer show 仍显示旧版本。
- 检查是否刚改完
composer.json没 runcomposer update或composer install - 运行
composer show --platform可查看 PHP / 扩展等平台信息,排除环境兼容性导致的版本降级 - 如果怀疑版本冲突,用
composer why-not vendor/package:version更直接
包详情里 “source” 字段显示的是 VCS 地址,但不会告诉你 commit hash 是否 dirty;如果本地改过 vendor 里的代码,composer show 看不出来,得靠 git status vendor/xxx 手动确认。










