Composer如何查看已安装的包列表?(常用命令汇总)

7次阅读

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

Composer如何查看已安装的包列表?(常用命令汇总)

查看当前项目所有已安装包(含版本)

直接运行 composer show 就能列出全部已安装的包,包括它们的当前版本、描述和依赖关系。它默认只显示直接 require 的包,但加上 --all 参数会把所有依赖(包括子依赖)都拉出来——这在排查冲突或确认某个底层库是否被引入时很关键。

  • 只看顶层依赖:composer show
  • 看完整依赖树(含传递依赖):composer show --all
  • 快速过滤某个包:composer show | grep "monolog"linux/macos)或 composer show | findstr "monolog"windows
  • 注意:如果项目还没执行过 composer installcomposer updatevendor/ 不存在,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-autoloadupdate 等命令列表,完全不是想要的信息。

  • 真正查包的命令只有 show 系列:showshow --allshow vendor/name
  • composer list 的输出里压根没有包名、版本、依赖这些字段
  • 如果想确认某个命令是否存在,composer list | grep show 可以辅助,但它本身不解决“有哪些包”这个问题

包版本的实际值藏在 vendor/composer/installed.json 里,但直接读这个文件风险高——格式可能随 Composer 版本变化,且不含远程元数据。坚持用 composer show,它是唯一被保证稳定的接口

text=ZqhQzanResources