composer show 默认只显示 composer.json 中直接声明的包,不包含间接依赖;加 --installed 或 --tree 才显示实际安装的全部包,因其依赖 composer.lock 或 vendor/composer/installed.json 而非实时扫描 vendor/ 目录。

默认 composer show 只显示你手动写进 composer.json 的包,不是 vendor 里真实存在的全部包——想看到磁盘上实际装了什么,必须加 --installed 或 --tree。
为什么 composer show 输出比 ls vendor/ 少很多
它默认只读 composer.lock 中的顶级 packages 字段,跳过所有间接依赖(比如 symfony/console 拉进来的 psr/log)。你手动写在 composer.json 的 require 和 require-dev 才会出现在默认输出里。
- 常见错误现象:
composer show返回空或只有三五个包,但ls vendor/里有几十个目录——这不是漏装,是命令行为如此 - 执行前确认已在项目根目录(含
composer.json和vendor/) - 确保已运行过
composer install或composer update,否则composer.lock或vendor/composer/installed.json可能缺失 - 若用过
composer install --no-dev,require-dev里的包(如phpunit/phpunit)不会出现,哪怕它们还在composer.json里
composer show --tree 查完整依赖树
这是唯一能还原真实安装结构、排查版本冲突的方式。输出带缩进和箭头,例如:
laravel/framework v10.48.12
└── symfony/console v6.4.7
└── psr/log 3.0.0
它严格按当前安装状态展示,不包含被 --no-dev 排除的开发依赖。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 终端宽度不够时长包名会被截断,建议加
| less -S或重定向到文件:composer show --tree > deps.tree - 依赖太深?别滚动找,直接
composer show --tree | grep "guzzlehttp" - 注意:该命令不扫描
vendor/目录,完全依赖composer.lock解析结果;锁文件损坏会导致输出与磁盘不一致
composer show --installed --no-ansi 导出干净列表
需要一行一个 vendor/name version 的纯文本格式,用这个组合最稳:
-
--installed强制只输出已安装的包(跳过composer.json里写了但没install的) -
--no-ansi去掉颜色和控制字符,避免重定向到文件时混入乱码 - 等价短命令:
composer show -i --no-ansi(-i = --installed) - 只要包名不要版本:
composer show --installed --no-ansi | awk '{print $1}' - 想 JSON 格式?
--format=json可用,但嵌套结构解析成本高,日常推荐--format=plain
composer show vendor/package 查单个包是否真装上了
直接输全名,大小写敏感,斜杠不能少:composer show guzzlehttp/guzzle。它会显示该包在 vendor/ 中的实际安装版本,以及它的 composer.json 元数据快照。
- 这个命令不联网,也不查 Packagist,只读本地已安装包的元信息
- 如果你刚
require了一个包但还没install,它不会出现在结果里 - 要确认是否被 root project 直接
require(而非间接依赖):检查输出里的type字段是否为library,再结合composer.json的require段比对 - 如果提示
Package not found,先ls vendor/确认包目录是否存在,再检查大小写——Composer 包名区分大小写,guzzlehttp/guzzle≠GuzzleHttp/Guzzle
真正容易被忽略的是:composer show 的所有输出都基于 vendor/composer/installed.json 或 composer.lock 的解析结果,而不是实时扫描 vendor/ 目录。一旦锁文件损坏、或 installed.json 被误删,命令就可能给出与磁盘不一致的“幻觉”结果。

















