composer show 不加参数时默认列出当前项目中所有已安装的根依赖(即 composer.json 中 require 和 require-dev 明确声明的包),按包名排序,格式为 vendor/name version description,不包含子依赖。

composer show 不加参数时默认查什么
不带任何参数执行 composer show,它只会列出当前项目中所有已安装的根依赖(即 composer.json 里 require 和 require-dev 明确声明的包),不包含它们的子依赖。这个列表按包名排序,每行格式是 vendor/name version description。
常见误解是以为它会显示整个依赖树——其实不会。想看完整结构,必须加 --tree 或指定具体包名。
用 composer show vendor/name 查包详情
指定包名能获取该包的精确信息:版本、源类型(git/dist)、安装路径、依赖声明、自动加载配置等。这是排查“为什么这个类找不到”或“我装的是不是最新版”的第一手依据。
- 如果包未安装,命令直接报错:
Package vendor/name is not installed - 支持通配符,比如
composer show monolog/*可批量查看 monolog 相关扩展 - 加
-s(--source)会显示包的源码来源(如 GitHub URL 和 commit hash),适合验证是否用了 fork 分支 - 加
-p(--platform)可查看 PHP 扩展级依赖(如ext-json),但仅对平台包有效
composer show --tree 看依赖层级关系
--tree 是理解依赖冲突和版本锁定的关键视角。它从根依赖出发,逐层展开每个包所依赖的其他包,缩进表示嵌套层级。但要注意:
- 只显示“实际被解析并安装”的依赖路径,跳过因版本约束被丢弃的候选包
- 同一包若被多个父包引用,只显示首次出现的路径;重复依赖不会重复展开
- 不显示
conflict或replace规则的影响,那些需结合composer why-not分析 - 输出可能很长,建议配合
grep过滤,例如:composer show --tree | grep "guzzlehttp"
composer show -p 和平台信息的陷阱
composer show -p 列出的是当前运行环境的 PHP 平台信息(PHP 版本、已启用扩展、INI 设置等),不是包列表。它等价于 composer show --platform,常被误认为是“查看所有包”。这个命令真正的用途是验证环境是否满足某包的 platform 要求。
比如某个包在 composer.json 中写了:
"config": {
"platform": {
"php": "8.1.0"
}
},那么 composer show -p 就能确认当前 PHP 是否真为 8.1+。否则 composer install 可能跳过某些依赖校验,导致运行时报错。
真正容易被忽略的是:这个平台信息会被 composer update 缓存,如果你升级了 PHP 但没清缓存或重跑 composer update,show -p 显示的仍是旧环境快照。










