composer如何导出已安装包列表_composer查看项目依赖方法【指南】

10次阅读

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

composer如何导出已安装包列表_composer查看项目依赖方法【指南】

直接用 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 但没 installshow 会报错或无输出:

  • 此时应先运行 composer install 恢复 vendor
  • composer show 不校验包完整性,不会提示某包文件缺失或损坏
  • 需要验证一致性?用 composer validate 检查 composer.json,或 composer check-platform-reqs 核对 php 扩展

真正导出「可复现」的依赖快照,唯一可靠方式是提交 composer.lock ——show 命令只是快照的视图,不是源头。

text=ZqhQzanResources