composer show 不加参数仅输出已安装包名(一行一个);加 -i 参数才显示版本、描述等完整信息;未执行 composer install 时无输出;查具体包需写全名如 monolog/monolog。

composer show 不加参数只显示已安装包列表
直接运行 composer show 会列出当前项目中所有已安装的依赖包(含 require 和 require-dev),但默认不显示版本号、描述或来源——它只输出包名,一行一个。很多人误以为这是“空”或“没结果”,其实是正常行为。
- 想看完整信息(含版本、描述、源仓库),必须加
-i或--installed参数 - 不加任何参数时,
composer show实际等价于composer show --platform=false,即过滤掉 PHP 扩展和平台包 - 如果项目还没执行过
composer install或composer update,vendor/为空,那composer show就真的一行都不输出
查某个具体包的详细信息:composer show vendor/name
用 composer show 加包名,能精准查看该包的版本、依赖树、autoload 配置、许可证等元数据。这比翻 composer.lock 或 vendor/composer/installed.json 直观得多。
- 包名必须写全,比如
composer show monolog/monolog,不能只写monolog - 如果包未安装(不在
vendor/中),命令会报错:Package monolog/monolog not found - 支持通配符,如
composer show "monolog/*"可批量查 monolog 家族所有已安装包 - 加
-t参数可显示该包所依赖的其他包(依赖树),适合排查冲突或冗余依赖
列出所有包并按版本排序:composer show -i --sort=version
composer show -i 是最常用的有效起点,它强制只显示已安装包,并附带版本号和简短描述。加上 --sort=version 后,能快速识别哪些包用了 dev-main、v1.2.x-dev 这类非稳定版本,方便做升级决策。
-
--sort支持的字段只有name、version、type,不支持自定义字段 - 排序对大小写敏感,
symfony/console会排在Symfony/Console前面(如果真有两个) - 如果想导出为文本分析,可用
composer show -i --format=json > packages.json,但注意 JSON 输出不含排序逻辑
为什么 composer show 显示的版本和 composer.lock 不一致?
常见现象是 composer show monolog/monolog 输出 2.10.0,但打开 composer.lock 却看到 "version": "2.10.0+xyz" 或 "reference": "a1b2c3..."。这不是 bug,而是 Composer 在展示时做了简化处理。
-
composer show显示的是“解析后的语义化版本”,即 Composer 认为该包当前生效的逻辑版本(通常取自composer.json中的version字段或 tag) -
composer.lock存的是实际安装的 commit reference 或完整 version string,尤其在使用dev-master或v2.10.0@dev时差异明显 - 真正决定运行时行为的是
composer.lock里的reference和dist.url,show命令只是个快照视图,别拿它当权威版本源
composer install。很多 CI 或 Docker 构建流程里漏了这步,composer show 就永远是空的——它不读 composer.json,只读 vendor/ 和 composer.lock 的交集。










