composer show 不加参数等价于 --all,会扫描 packagist 并输出所有匹配包,慢且干扰大;要准确查看已安装包及版本,必须加 -i 参数或指定包名,如 composer show monolog/monolog。

composer show 不加参数只显示已安装包列表
直接运行 composer show 会列出所有已安装包,但默认不显示版本号细节——它只输出包名和简略描述,容易误以为“没装成功”或“版本不对”。真正要看具体版本,必须加参数。
- 加
-i(--installed)才强制只显示已安装的包(排除 require-dev 中未安装的) - 加
-s(--self)可单独看当前项目自身信息(比如name、version、type) - 不加任何参数时,
composer show实际等价于composer show --all,会把 packagist 上匹配的包都扫一遍,慢且干扰大
查看某个包的精确版本和依赖树用 show 包名
想确认 monolog/monolog 到底装的是 2.9.1 还是 dev-main?直接指定包名最准:
composer show monolog/monolog
它会输出:versions(实际安装的版本)、source(Git URL 和 commit)、dist(zip 下载地址)、requires(该包依赖谁)、required-by(谁依赖了它)。
- 如果包名拼错或未安装,会报错
[InvalidArgumentException] Package monolog/monolog not found - 包名区分大小写,
Monolog/Monolog会失败,必须小写monolog/monolog - 要同时看多个包,只能重复执行,
composer show a/b c/d不支持
想导出完整版本快照得用 show -f json
人工翻几十个包太累,需要结构化数据时,-f json 是唯一可靠方式:
composer show -i -f json
输出是标准 JSON,包含每个包的 name、version、install-path、source-type 等字段。适合配合 jq 提取关键信息,比如只看版本:
composer show -i -f json | jq '.packages[].version'
-
-f json必须和-i搭配,否则 JSON 里会混入未安装包的元数据 - PHP 版本低于 7.4 时,某些 Composer 版本可能不支持
-f json,建议先composer --version确认 ≥ 2.2 - 输出不含
require-dev包,哪怕它们已安装——Composer 把 dev-only 包归类为“非生产依赖”,-i默认过滤掉了
composer outdated 显示可升级但不反映真实安装版本
composer outdated 看的是“哪些包有新版本”,不是“当前装了什么”。它默认只显示有更新的包,且版本号列的是远程最新版,不是本地已安装版。
- 加
--direct只检查composer.json顶层声明的包,忽略传递依赖 - 加
--minor-only或--patch-only控制升级粒度,但依然不告诉你本地到底装的是1.2.3还是1.2.3+gitabc123 - 它不显示
dev-master或dev-feature/x这类开发分支的实际 commit hash,而composer show 包名会明确写出source-reference
真正要核对一个包是不是你预期的 commit 或 tag,composer show 包名 的 source 字段比任何其他命令都直接。很多人卡在 CI 部署后行为不一致,最后发现是本地 dev-main 跟线上 v2.9.1 根本不是同一份代码——这种细节,只有 show 带具体参数才能暴露出来。










