直接查已安装包元数据用 composer show vendor/package-name,输出版本、描述、作者、许可证、homepage、source 和 autoload 等字段;加 -s 查 autoload/scripts,–tree 查依赖树,–format=json 配合 jq 提取字段。

直接查已安装包的完整元数据
运行 composer show vendor/package-name 是最直接的方式,它会输出该包的版本、描述、作者、许可证、homepage(通常是文档链接)、source 和 autoload 配置等全部字段。比如 composer show monolog/monolog 就能立刻看到它的 PSR-4 映射规则和依赖列表。
- 必须带
vendor/name格式,漏掉vendor(如只输framework)会报错Package framework not found - 不加包名时
composer show只列顶层依赖(require里声明的),不是所有已安装包 -
homepage字段大概率就是官方文档地址;若为空,可顺手看source或去 Packagist 页面补全
看 autoload 和 scripts 配置调试类找不到或命令失败
类加载出错、自定义命令执行不了?关键要看 autoload 和 scripts —— 这些默认不显示,得加 -s(即 --show-config):
composer show -s monolog/monolog 输出里就能确认 "Monolog": "src/" 是否生效,以及 scripts 里有没有注册 post-install-cmd 这类钩子。
- 这个选项在 Composer 2.2+ 才稳定支持,旧版会提示未知参数
- 别用
grep autoload粗暴匹配,因为 JSON 结构可能跨行;-s是专为人工调试设计的可读格式 - 如果
autoload里没映射你用的命名空间,类就一定找不到——这是 80% 的“class not found”根源
查依赖树:确认谁装了它、有没有冲突
想知道某个包为什么被拉进来,或者怀疑它引了多个版本的 psr/log,就用 --tree:
composer show --tree laravel/framework 会以缩进形式展示完整依赖路径,比如:
laravel/framework v10.48.12 └── symfony/console v6.4.7 └── psr/log 3.0.0
- 它只显示当前已解析并安装的路径,
require-dev里的包若没被实际 require,可能不会出现 - 想查反向依赖(谁依赖了这个包),换命令:
composer prohibits --tree vendor/package-name - 输出太长时,直接管道过滤:
composer show --tree | grep -E "(monolog|psr)"
自动化提取字段:用 JSON + jq 精准拿 license 或 version
CI 脚本里要批量审计许可证、比对版本号,靠人眼翻文本不现实。用 --format=json 配合 jq 最稳:
composer show --format=json guzzlehttp/guzzle | jq -r '.license' 输出 MIT;jq -r '.require."php"' 能取最低 PHP 版本要求。
- 常见字段名是
name、version、description、homepage、require(注意不是requires) - 本地没装
jq?那就只能grep -A1 "license"硬来,但容易断行或漏字段,尤其当值含换行时 -
--all参数适合选版本或查废弃提示,比如composer show -a symfony/http-kernel列出所有历史 tag
真正麻烦的不是命令记不住,而是搞不清「查的是已安装的包」还是「查远程最新信息」——前者不用参数,后者必须加 --remote;还有人卡在 --tree 不显示 dev 依赖,结果以为依赖没装上。这些边界条件,比语法本身更常导致排查绕弯。