composer show 默认只显示一行版本号;查完整元数据须用 -s,依赖树用 --tree,远程版本用 --all,结构化提取用 --format=json 配合 jq。

直接用 composer show vendor/package-name 查,但不加参数只显示一行版本号——这不是 bug,是默认行为;想看到作者、依赖、autoload 配置,必须加参数。
查已安装包的完整元数据:必须写全名 + 加 -s
运行 composer show monolog/monolog 只会输出 monolog/monolog 3.5.0,连 description 都不显示。真正要看 autoload 映射、require 列表、homepage 或 author 字段,得加 -s(即 --summary):
-
composer show -s monolog/monolog会展示autoload下的 PSR-4 映射(如"Monolog\": "src/"),这对 debug 类找不到问题极关键 - 如果包没装上,命令会明确报
Package monolog/monolog is not installed,不会静默失败 - 包名必须带
vendor/前缀,composer show monolog一定失败;大小写敏感,Monolog/Monolog也不行 - 若项目用了
composer install --no-dev,而包只在require-dev里,composer show就查不到它
看依赖树或反向追溯:--tree 和 composer depends 不可互换
composer show --tree laravel/framework 展示的是「谁把它拉进来、它又拉了谁」的向下依赖链,缩进表示层级,比如:
laravel/framework v10.48.12
└── symfony/console v6.4.7
└── psr/log 3.0.0
这能帮你确认为什么装了两个 psr/log 版本——但注意,它只显示当前 composer.lock 里已解析并安装的路径,被约束排除的候选版本不会出现。
- 想查「谁依赖了
psr/log」,得用composer depends --tree psr/log,不是show --tree - 输出太长时,用
composer show --tree | grep "guzzle"过滤,但注意保留前导空格,否则缩进结构丢失 -
--tree不支持通配符,composer show --tree "laravel/*"会报错
查远程包信息:--all 和 --remote 的区别很实在
composer show --all guzzlehttp/guzzle 会实时请求 Packagist API,列出所有发布过的版本(含 dev-main、v7.9.0、3.0.x-dev),适合评估升级窗口或避开已知问题版本。
-
--all(双横线)是正确参数,-a是旧版别名,在 Composer 2.2+ 中已被弃用,加了也无效 -
--remote只返回 Packagist 上标记为latest的那个版本详情,不是全部;不能和--all同时用 - 如果包名拼错(如
guzzlehttp/guzle),composer show --all默认静默失败,必须加-v才能看到Package not found - 未安装的包,
composer show无法返回source或dist字段,这些字段只对本地已安装包有效
自动化提取字段:别用 grep,用 --format=json + jq
想批量取 license、homepage 或 autoload 路径,靠 grep 匹配文本极易出错——换行、缩进、字段顺序都可能让正则失效。
- 用
composer show --format=json monolog/monolog | jq -r '.homepage'直接拿到 URL 字符串 - 查 PSR-4 映射:
composer show --format=json monolog/monolog | jq -r '.autoload["psr-4"]["Monolog\"]'输出src/ -
--format=json在 Composer 2.2+ 稳定支持;旧版本会提示unrecognized option - 注意字段名是
require,不是requires;description字段通常很短,完整说明仍需去 GitHub README
最容易被忽略的是:所有 composer show 命令的结果,都严格以 composer.lock 为准,不是 composer.json 里的版本约束。如果你刚改了 composer.json 但没 update,show 显示的仍是 lock 文件里锁死的老版本。











