composer show 用于查看包元数据:加包名查详细信息,不加参数仅列已安装包名和版本;-s 显示 autoload/scripts 配置;--tree 查依赖树;--all 列所有候选版本;--format=json 配合 jq 精准提取字段。

composer show 查看包基本信息
直接运行 composer show vendor/package-name 就能查到该包的版本、描述、依赖、自动加载配置等元数据。不加参数时 composer show 会列出当前项目所有已安装包,但信息极简(只有包名和版本),不适合排查细节。
常见误操作是只输包名漏掉 vendor 名,比如 composer show laravel/framework 正确,而 composer show framework 会报错 Package framework not found。
用 -s 或 --show-config 显示包的 autoload 和 scripts 配置
composer show -s vendor/package-name 会把 autoload、autoload-dev、scripts 这些关键字段展开输出,对调试类找不到、命令执行失败特别有用。
例如查看 monolog/monolog 的 PSR-4 映射:
composer show -s monolog/monolog | grep -A2 autoload
输出里能看到 "Monolog\\": "src/",说明它把 Monolog\Logger 映射到 vendor/monolog/monolog/src/Logger.php。
注意:这个选项在 Composer 2.2+ 才稳定支持,旧版本可能提示未知参数。
加 --tree 查看依赖层级关系
想确认某个包为什么被装进来,或者检查是否存在重复/冲突的子依赖,用 composer show --tree vendor/package-name。
输出是缩进树状结构,比如:
laravel/framework v10.48.12
└── symfony/console v6.4.7
└── psr/log 3.0.0
这比翻 composer.lock 直观得多。但要注意:它只显示当前已解析出的依赖路径,如果包没被实际 require(比如仅在 dev 依赖里),可能不会出现在树中。
可搭配 --all 查看所有版本候选:composer show --all vendor/package-name,适合选版本或查废弃提示。
过滤字段用 --format=json + jq 精准提取
当需要自动化处理或快速定位某字段(如 license、homepage),composer show --format=json vendor/package-name 输出标准 JSON,再用 jq 提取:
composer show --format=json guzzlehttp/guzzle | jq -r '.license'
输出:MIT
常见字段名有 name、version、description、homepage、require(注意不是 requires)。别忘了加 -r 参数避免引号包裹字符串。
这个组合在 CI 脚本或批量审计许可证时很实用,但本地没装 jq 就得靠 grep + 正则硬匹配,容易漏行或断行。
依赖解析逻辑藏在 lock 文件和 vendor/composer/installed.json 里,show 命令只是读取这些缓存数据,所以刚改完 composer.json 但没 install 或 update,看到的就不是最新状态。










