composer show 默认仅显示直接依赖,加 --tree 可查看完整依赖树,--name-only 仅列直接依赖包名,--format=txt 可导出带缩进的完整依赖文本,删包前须用 composer why 确认依赖关系。

直接用 composer show 就能看到当前项目所有已安装包及其版本,但要注意它默认只显示直接依赖;想导出完整依赖树(含嵌套依赖),得加参数或换命令。
查看当前项目所有已安装包(含间接依赖)
composer show 默认只列出 直接 require 的包,容易误以为没装全。要看到全部(包括 monolog/monolog 这类被其他包拉进来的依赖),必须加 --tree 或 -t:
composer show --tree
输出是缩进式树形结构,层级清晰。如果只想看扁平列表(不含版本号和描述),可用:
composer show --name-only
- 该命令仍只返回直接依赖
- 加
--tree后才包含所有已安装包 - 输出内容实时读取
vendor/composer/installed.json,不重新解析composer.lock
导出依赖列表为文本文件(供审计或备份)
最常用的是生成纯文本清单,推荐用 composer show --format=txt 配合重定向:
composer show --format=txt > dependencies.txt
注意:--format=txt 会输出带树形缩进的完整依赖,而 --name-only 不支持 --format 参数。若只要包名+版本一行一个,可用:
composer show -N | xargs -n1 composer show --no-ansi | grep -E '^name|^version' | paste -d' ' - - | sed 's/name : //g; s/version : //g'
- 上面 shell 命令在 Linux/macOS 可用,Windows PowerShell 需改写
- 更稳妥的替代:用
composer show --direct --format=json提取关键字段再处理 - 别依赖
composer.lock手动解析——格式可能随 Composer 版本变化
区分直接依赖和间接依赖(避免误删)
执行 composer why 能查清某个包为什么被安装:
composer why monolog/monolog
输出类似:laravel/framework v10.48.12 requires monolog/monolog (^2.9.1)。这对清理冗余依赖特别有用:
-
composer why-not可检查为何某版本无法安装 -
composer show --direct单独列出你手动require的包(不含子依赖) - 删包前务必先
composer why,否则可能因间接依赖被删导致运行时报错
注意 lock 文件与 vendor 实际状态可能不一致
composer show 显示的是 vendor/ 目录里真实存在的包,不是 composer.lock 的声明。如果执行过 rm -rf vendor 但没 install,show 会报错或无输出:
- 此时应先运行
composer install恢复 vendor -
composer show不校验包完整性,不会提示某包文件缺失或损坏 - 需要验证一致性?用
composer validate检查composer.json,或composer check-platform-reqs核对 PHP 扩展
真正导出「可复现」的依赖快照,唯一可靠方式是提交 composer.lock ——show 命令只是快照的视图,不是源头。










