Composer show命令全解:如何查看已安装包的详细信息与依赖树?

10次阅读

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

Composer show命令全解:如何查看已安装包的详细信息与依赖树?

composer show 不加参数时默认查什么

不带任何参数执行 composer show,它只会列出当前项目中所有已安装的根依赖(即 composer.jsonrequirerequire-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 是理解依赖冲突和版本锁定的关键视角。它从根依赖出发,逐层展开每个包所依赖的其他包,缩进表示嵌套层级。但要注意:

  • 只显示“实际被解析并安装”的依赖路径,跳过因版本约束被丢弃的候选包
  • 同一包若被多个父包引用,只显示首次出现的路径;重复依赖不会重复展开
  • 不显示 conflictreplace 规则的影响,那些需结合 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 updateshow -p 显示的仍是旧环境快照。

text=ZqhQzanResources