composer show 默认只显示顶层依赖,加 --tree 可查看完整依赖树,加包名可查具体信息,--installed --no-ansi 输出简洁列表,需在项目根目录执行且确保已运行 composer install。

直接运行 composer show 就能列出当前项目已安装的所有包,但默认只显示顶层依赖;想看完整依赖树或筛选特定包,得加参数。
查看全部已安装包(含依赖)
不加任何参数的 composer show 实际上只显示 composer.json 中直接声明的包(即 require / require-dev 里的),不是全部。要看到所有实际安装的包(包括递归依赖),必须加上 --tree 或 -t:
composer show --tree
这个命令会以缩进形式展示完整的依赖树,层级清晰。如果输出太长,可以配合 less 或 grep 过滤:
composer show --tree | grep "monolog"
查看某个具体包的详细信息
用 composer show 加包名,能查版本、描述、依赖关系和源码地址:
-
composer show monolog/monolog—— 查单个包 -
composer show nelmio/api-doc-bundle—— 支持带斜杠的完整 vendor/name 格式
注意:包名必须拼写完全正确,大小写敏感;如果提示 “Package not found”,大概率是没装,或者装在全局(composer global show 才能查)。
列出所有包但不展开依赖(简洁列表)
想要一行一个包名+版本的纯文本列表,适合后续脚本处理,用:
composer show --installed --no-ansi
关键参数说明:
-
--installed:强制只显示已安装的(避免误列出 lock 文件里有但未 install 的) -
--no-ansi:去掉颜色和控制字符,方便管道处理 - 不加
--tree就不会递归,只列扁平化清单
如果只想看包名(不含版本),可再切字段:
composer show --installed --no-ansi | awk '{print $1}'
常见错误与坑
这些情况容易让人以为命令失效或结果不对:
- 在错误目录下执行 ——
composer show必须在含composer.json和vendor/的项目根目录运行,否则报错或返回空 - 忘记
composer install—— 如果只改了composer.json但没 install,show不会显示新包 - 混淆本地 vs 全局 ——
composer global show查的是全局安装的包(如laravel/installer),和项目无关 - 缓存干扰 —— 极少数情况下
vendor/composer/installed.json损坏会导致show输出异常,可删掉vendor/重装验证
依赖树深度大时,--tree 输出可能非常长,别直接滚动找,优先用 grep 定位包名;另外,show 不检查包是否能正常加载,只反映 Composer 的安装记录。










