composer show 不加参数仅列已安装包名和版本;查单个包必须写全 vendor/package-name、在项目根执行,且包须已安装或存在于 composer.lock 中;加 -s 查 autoload/scripts,--all 查远程所有版本,--tree 展开依赖树。

composer show 不加参数时只列顶层包名和版本,根本不是“查看某个依赖”的正确用法——要精准查单个包,必须带全名、在项目根目录执行,且依赖已安装或存在于 composer.lock 中。
查已安装包的完整元数据:必须写全 vendor/package-name
输错名字或漏掉 vendor 段,composer show 会静默失败或报 Package not found。比如 monolog 不行,Monolog/monolog 也不行,只能是 monolog/monolog。
- 输出包含
versions(当前安装的实际版本)、requires(它自己声明的直接依赖)、license、homepage、source等字段 - 如果包只在
require-dev里,又用了composer install --no-dev,那它就不在vendor/里,composer show查不到 -
versions行显示的是实际安装值,可能是v3.5.0、dev-main或带 hash 的 dev 版,不是语义化约束(如^3.0)
看 autoload 映射和 scripts 钩子:必须加 -s(--show-config)
类找不到、自定义命令不触发?八成是 autoload 或 scripts 配置没生效。-s 是唯一能快速确认这两项是否被正确读取的方式。
-
composer show -s monolog/monolog会输出"Monolog\": "src/",对应到vendor/monolog/monolog/src/Logger.php - 同时列出
scripts字段里的钩子(如post-install-cmd),方便验证是否注册成功 - 该参数在 Composer 2.2+ 才稳定支持;旧版本会报
unrecognized option,别硬试
查它到底依赖了谁:用 composer show 就够,不用 depends 或 tree
想确认 guzzlehttp/guzzle 自己写了哪些 require,直接 composer show guzzlehttp/guzzle,看输出里的 requires 块就行。
- 这里只显示它 声明 的直接依赖,不递归展开,也不受你本地是否装了那些子包影响
- 如果包没安装过,
composer show会报错——先composer install或确保composer.lock已存在且最新 - 注意区分:输出中
^7.0是版本约束,v7.8.1才是真实安装版本;后者得配合--tree或翻composer.lock确认
为什么 composer show package 有时没反应或结果不对
最常见原因是路径、状态、版本三者不匹配:不在项目根目录、vendor/ 或 composer.lock 缺失、Composer 版本太旧。
- 所有
show命令都依赖composer.lock解析结果,刚 clone 项目但没运行过composer install,必然查不到任何包 - Windows 用户用 PowerShell 时,管道过滤要用
sls而非grep,否则composer show --tree | grep "psr"会失效 -
--all必须用双横线,-a在 Composer 2.2+ 已弃用,加了也无效,还不报错——容易误以为查到了全部版本


















