composer show 是查看项目已安装包及其版本的正确命令,支持 --all 查全部依赖、vendor/name 查指定包、--format=json 导出结构化数据,而 composer list 仅列出命令不查包。

查看当前项目所有已安装包(含版本)
直接运行 composer show 就能列出全部已安装的包,包括它们的当前版本、描述和依赖关系。它默认只显示直接 require 的包,但加上 --all 参数会把所有依赖(包括子依赖)都拉出来——这在排查冲突或确认某个底层库是否被引入时很关键。
- 只看顶层依赖:
composer show - 看完整依赖树(含传递依赖):
composer show --all - 快速过滤某个包:
composer show | grep "monolog"(Linux/macOS)或composer show | findstr "monolog"(Windows) - 注意:如果项目还没执行过
composer install或composer update,vendor/不存在,show会报错Could not find package
按名称精确查某个包的详细信息
用 composer show vendor/name 可以查指定包的完整元数据,比如它支持哪些版本、有哪些 require 和 conflict 声明、源码地址在哪。这个命令不依赖本地是否已安装该包——只要 Packagist 上有,就能查到公开信息。
- 查已安装的包:
composer show guzzlehttp/guzzle - 查未安装但可安装的包:
composer show laravel/framework(只要网络通,照样返回结果) - 加
-s参数能看到源码仓库地址:composer show symfony/console -s - 别写错 vendor 名:比如
composer show illuminate/support是对的,composer show laravel/support就会提示找不到
列出所有已安装包并导出为 JSON
需要做自动化处理(比如 CI 检查、安全扫描集成)时,composer show --format=json 是唯一可靠的方式。它输出标准 JSON,字段稳定,不会受终端宽度、颜色或语言环境影响。
- 导出全部已安装包:
composer show --format=json > deps.json - 只导出顶层依赖(不含子依赖):
composer show --format=json --no-dev(注意--no-dev在这里控制的是 dev 依赖开关,不是“是否包含子依赖”) - JSON 输出里每个包的
version字段是实际安装的版本号,不是composer.json里写的约束表达式(比如^8.0) - 别用
composer show --all --format=json:它会把整个依赖树展开成扁平数组,结构复杂,解析成本高,通常没必要
为什么 composer list 不是答案?
composer list 是列出所有可用命令的清单,不是查包的命令。新手常因为名字里有“list”就误用,结果看到一堆 dump-autoload、update 等命令列表,完全不是想要的信息。
- 真正查包的命令只有
show系列:show、show --all、show vendor/name -
composer list的输出里压根没有包名、版本、依赖这些字段 - 如果想确认某个命令是否存在,
composer list | grep show可以辅助,但它本身不解决“有哪些包”这个问题
包版本的实际值藏在 vendor/composer/installed.json 里,但直接读这个文件风险高——格式可能随 Composer 版本变化,且不含远程元数据。坚持用 composer show,它是唯一被保证稳定的接口。










