
composer show 命令查包详情,最常用也最容易输错
直接运行 composer show vendor/package-name 就能拿到包的完整元数据——版本、描述、依赖、自动加载规则、许可证、作者、主页链接等。但很多人卡在第一步:输错包名。
- 必须带
vendor/前缀,composer show laravel/framework正确,composer show framework会报错Package framework not found - 不加参数时
composer show只列顶层依赖(即composer.json里直接写的),不是全部已安装包;想看所有包,得用composer show --tree或composer show --installed - 包名支持通配符,比如
composer show monolog/*可一次性查所有 monolog 相关扩展
查文档链接?先看 homepage 字段,别硬猜
composer show 输出里的 homepage 字段,通常就是官方文档或项目主页地址。这不是推测,是 Packagist 上维护者填的字段,优先级高于 source 或 dist。
- 例如
composer show monolog/monolog会输出homepage https://github.com/Seldaek/monolog,点进去 README 里一般就有文档入口 - 如果
homepage为空,再看source(通常是 GitHub/GitLab 地址),然后手动拼文档路径,比如https://github.com/xxx/yyy/blob/main/README.md或https://xxx.github.io/yyy/ - 注意:有些包只填了
source却没填homepage,这时不能默认“没文档”,只是字段没填全
查依赖树和冲突来源,--tree 是刚需,不是可选
当 composer install 报“无法解析依赖”或你怀疑某个包被多个路径拉进来了,--tree 是唯一能快速定位真实依赖链的命令。
-
composer show --tree vendor/package-name展示的是当前已实际安装的依赖路径,缩进表示层级,比翻composer.lock直观得多 - 它只显示“被成功解析并装上的路径”,跳过因版本约束被丢弃的候选包——这点很重要,否则你会误以为某条路径还存在
- 输出太长时,用
grep过滤更高效:composer show --tree | grep "guzzlehttp",但注意别漏掉缩进空格导致匹配失败 - 想反向查谁依赖了某个包?用
composer depends --tree package/name,不是show的功能
自动化提取字段?JSON + jq 比 grep 更稳
要批量取 license、homepage 或 require 列表,别靠 grep 硬匹配——换行、缩进、字段顺序都可能让正则崩掉。
- 用
--format=json输出标准结构:composer show --format=json guzzlehttp/guzzle - 配合
jq提取字段最可靠:composer show --format=json guzzlehttp/guzzle | jq -r '.homepage',-r去掉引号,直接得 URL 字符串 - 常见字段名是
name、version、description、homepage、require(注意不是requires) - 没装
jq?本地调试可以忍,CI 脚本里建议装上,否则用grep -A1 "homepage"这类方式容易断行或漏字段
真正麻烦的不是命令记不住,而是看到 composer show 输出一堆字段后,不知道哪个字段对应什么用途、哪个参数只在 Composer 2.2+ 才有效、哪些字段在远程包和本地包里表现不同——这些细节不踩一遍坑,很难凭直觉判断该信哪一行。










