composer show 是精准查证工具,需加 -s 查 autoload/scripts、--tree 查依赖树、--all 查远程所有版本、指定版本号查元数据,且强依赖 composer.lock 完整性与项目根目录执行。

composer show 不是“搜索框”,而是“精准查证工具”——输错包名、漏参数、没加版本号,它就只给你一行版本号,甚至静默失败。
查已安装包的完整元数据:必须加 -s 才能看到 autoload 和 scripts
默认执行 composer show monolog/monolog 只输出类似 monolog/monolog 3.5.0 的一行,根本看不出类怎么加载、有没有自定义命令。真正要调试 autoload 映射或确认 post-install-cmd 是否生效,得强制加 -s(即 --show-config):
-
composer show -s monolog/monolog会显示"Monolog\": "src/"这类 autoload 配置,直接对应到vendor/monolog/monolog/src/Logger.php -
scripts字段里列出的钩子(如phpunit或infection)也会一并打印,方便验证是否被正确注册 - 这个选项在 Composer 2.2+ 才稳定支持;旧版本会报
unrecognized option,别硬试
看依赖树为什么装了两个 psr/log:必须用 --tree,不能只靠 composer show 默认输出
默认 composer show laravel/framework 只显示顶层信息,完全看不出它拉了哪个 symfony/console、后者又带了哪个 psr/log 版本。真实冲突路径只能靠 --tree 展开:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer show --tree laravel/framework输出缩进结构,例如:└── psr/log 3.0.0,层级关系一目了然 - 它只反映当前
composer.lock解析出的实际路径;如果某包只在require-dev且你运行过composer install --no-dev,它就不会出现在树里 - 输出太长时别手动翻,直接管道过滤:
composer show --tree | grep "guzzle"
查远程所有可用版本:必须用 --all,-a 是无效别名
想确认 guzzlehttp/guzzle 有没有 v8.0 稳定版、是否支持 PHP 8.3,不能只跑 composer show guzzlehttp/guzzle——它默认只返回本地缓存过的版本,可能漏掉刚发布的 tag。必须用双横线 --all 强制走 Packagist API:
-
composer show --all guzzlehttp/guzzle返回全部版本列表(含dev-main、v7.9.0、8.0.0-rc1),附带发布时间和稳定性标记 -
-a是常见误写,会被忽略,不报错也不提示,结果还是旧缓存 - 私有包需额外指定
--repository,且 URL 必须是合法的 packages.json 地址,填 Git URL 会报Could not parse version constraint
查某个具体版本的完整配置:包名 + 版本号缺一不可
光知道 monolog/monolog 有 v3.5.0 不够,得确认这个版本的 autoload 怎么写、require 里绑了哪些 PHP 版本。这时必须把版本号作为独立参数传进去:
-
composer show monolog/monolog 3.5.0会输出该版本完整的composer.json元数据,包括type、autoload、require、conflict等字段 - 拼错包名(比如
monolog/monologg)或大小写错误(Monolog/Monolog),默认静默失败;加-v才能看到Package not found - 如果包从未
require过,也未出现在composer.lock中,composer show就查不到——它不查源码仓库,只查 lock 文件和本地缓存
最容易被忽略的是:所有这些行为都强依赖 composer.lock 的完整性,以及是否在项目根目录执行。换目录、lock 文件损坏、或用了 --no-dev 安装,都会让 composer show 返回意料之外的空或截断结果。

















