composer info 与 composer show 功能完全相同,均为查看包信息的命令;不加参数时仅显示已安装包的 name+version,需加 -s 或 --all 等选项才能获取完整元数据或远程版本详情。

composer info 和 composer show 是同一个命令,没有功能差异——别白费力气查文档区别,它们共享全部参数、输出格式和底层逻辑。
为什么 composer info 只显示一行版本号?
这不是 bug,是默认行为:不指定参数、不加包名时,它只列已安装包的 name + version;指定包名但没加其他选项(如 -s),也只输出 vendor/package x.y.z 一行。想看到 autoload、require、author,必须显式加参数。
-
composer info monolog/monolog→ 仅monolog/monolog 3.5.0 -
composer info -s monolog/monolog→ 显示 PSR-4 映射、homepage、license、description 等完整元数据 - 漏掉
vendor/前缀(如composer info monolog)→ 直接报错Package not found - 包未安装(或只在
require-dev且用了--no-dev)→ 明确提示Package monolog/monolog is not installed,不会静默失败
composer info -s 能帮你 debug 类找不到问题
autoload 配置错误是「Class not found」最常见原因。-s 输出里会明确列出 "autoload": {"psr-4": {...}} 或 "classmap" 映射,直接对应到 vendor 目录下的实际路径。
- 例如
composer info -s monolog/monolog输出"Monolog\": "src/",说明MonologLogger应该位于vendor/monolog/monolog/src/Logger.php - 如果映射路径拼错(比如写成
"src/Log/"却放了Logger.php在src/下),composer dump-autoload不会报错,但运行时就找不到类 -
composer info -s不显示 classmap 的具体文件列表,只告诉你启用了 classmap;要确认哪些文件被扫进去了,得看vendor/composer/autoload_classmap.php
查远程包信息必须用 --all,-a 已失效
想确认某个包有没有 v8.0、是否标记为 abandoned、PHP 兼容性如何,不能依赖本地缓存。composer info --all guzzlehttp/guzzle 会实时请求 Packagist API,返回所有历史版本摘要。
-
--all(双横线)是唯一有效参数,-a在 Composer 2.2+ 中已被弃用,加了也不报错,但结果仍是旧缓存 - 包名大小写敏感:
guzzlehttp/guzzle✅,GuzzleHttp/Guzzle❌ → 404 - 拼错包名(如
guzzlehttp/guzle)默认静默失败,必须加-v才能看到Package not found -
--all和--remote互斥:--remote只返回 Packagist 标记为latest的那个版本详情,不是全部
批量提取字段要用 --format=json + jq
肉眼扫 terminal 输出容易漏关键字段,尤其要批量检查几十个包的 license 或 autoload 配置时。
-
composer info --format=json monolog/monolog | jq -r '.license'→ 输出MIT -
composer info --format=json monolog/monolog | jq -r '.autoload["psr-4"]["Monolog\"]'→ 输出src/,可直接用于路径校验脚本 -
--format=json对未安装包无效,只对本地已解析的包(即出现在composer.lock中的)生效;查远程包得走 Packagist API(如https://packagist.org/p/monolog/monolog.json) - 注意:多数包的
readme字段为空,composer info --format=json不会包含 README 内容,别指望它替代 GitHub 页面
真正容易被忽略的是:所有这些命令都强依赖 composer.lock 的完整性。如果 lock 文件过期、被手动编辑或缺失,composer info 查到的版本、依赖关系、autoload 配置都可能和实际运行时不一致——debug 前先 composer update --lock 确认锁文件最新。


















