composer show 默认只显示顶层依赖,即 composer.json 中直接声明的包;加 --tree 可查看全部已安装包的树形结构,加 --installed --no-ansi 可导出干净的扁平列表。

composer show 默认只显示顶层依赖,不是“已安装的全部包”
很多人执行 composer show 后发现结果比 vendor/ 里实际存在的包少很多,误以为漏装了——其实不是漏,是默认行为如此。它只列出 composer.json 中 require 和 require-dev 直接声明的包(即你手动加进去的),不递归展开它们的依赖。
- 想看真正装进
vendor/的每一个包(含二级、三级依赖),必须加--tree或-t -
composer show --tree输出层级缩进结构,一眼能看出谁依赖谁 - 输出太长时,可管道过滤:
composer show --tree | grep "guzzlehttp" - 注意:该命令需在项目根目录运行,且确保已执行过
composer install或composer update
快速列出所有已安装包(无树形、无颜色、适合脚本)
如果只是想导出一份干净的包名+版本列表(比如做审计、对比环境差异),composer show --installed --no-ansi 是最稳的选择。
-
--installed强制只显示已安装的包(跳过composer.json里写了但没install的) -
--no-ansi去掉颜色和控制字符,避免重定向到文件时混入乱码 - 等价短命令:
composer show -i --no-ansi(-i=--installed) - 不加
--tree时,它仍只显示顶层依赖;如需全量扁平列表,得用composer show --tree | awk '{print $1" "$2}' | sort -u这类组合
查某个包的具体信息或依赖来源
当你看到一个包出现在 vendor/ 里,但不确定是谁引入的,或者想确认它的当前版本、描述、源地址,直接查包名最高效。
- 查
monolog/monolog:composer show monolog/monolog - 加
-s(--source)能看到它从哪个仓库下载、是否用了镜像源 - 加
-p(--platform)会显示 PHP 及扩展依赖(如ext-json),常用于排查环境兼容问题 - 注意:包名必须写全,包括 vendor 名,
composer show monolog会报错
别把 composer list 和 composer show 搞混
composer list 是查 Composer 自己有哪些命令(比如 dump-autoload、outdated),不是查已安装的 PHP 包。新手常因名字相似而误用。
-
composer list→ 查命令列表(“Composer 能干什么”) -
composer show→ 查已安装的包(“项目里有什么”) - 想确认某命令是否存在(比如插件命令),用
composer list | grep "phpstan",而不是composer show phpstan - 第三方插件命令(如
larastan:analyse)只有在composer require-dev安装且composer install成功后才会出现在list中
真正容易被忽略的是:没有 --tree 就永远看不到间接依赖;而没加 --installed 时,show 甚至可能显示未安装的包(如果 composer.json 里有但本地没 install)。这两个开关不是可选,是刚需。










