composer怎么导出所有包_composer生成依赖列表方法

composer show 是查看已安装包的最轻量可靠方式,支持 -s、–format=json、包名过滤、–tree 查依赖树及 –locked 基于 lock 解析;真正权威依赖快照是 composer.lock 文件本身。

composer怎么导出所有包_composer生成依赖列表方法

composer show 列出所有已安装包

直接运行 composer show 就能看到当前项目里所有已安装的包及其版本,这是最轻量、最可靠的实时查看方式。它不依赖 lock 文件是否完整,也不要求 vendor 目录存在(只要 composer.json 在就行)。

常见错误是误用 composer list —— 那只是列出可用命令,不是包列表。

  • -s 参数可显示包的简短描述(composer show -s
  • --format=json 可输出结构化数据,适合脚本解析(composer show --format=json
  • 想查某个具体包?直接跟上名字:composer show monolog/monolog

composer show –tree 查看依赖树结构

单纯列表看不出谁依赖谁,composer show --tree 会按嵌套层级展开,一眼看出 laravel/framework 为什么拉进了 symfony/http-foundation

注意:这个命令只展示当前已安装的依赖关系。如果 vendor 被删了但 lock 还在,它会报错说“package not installed”,此时得先 composer install 或改用 composer show --tree --locked(见下一条)。

  • --locked 强制基于 composer.lock 解析,即使 vendor 为空也能跑
  • 输出过长时建议加 | less 或重定向到文件:composer show --tree --locked > deps-tree.txt
  • 某些深度嵌套的 dev-only 包可能被隐藏,加 --dev 才显示

composer export 导出可安装的依赖列表(非标准命令)

Composer 没有原生的 composer export 命令。所谓“导出所有包”,实际只有两种靠谱路径:

  • 导出 lock 文件里记录的精确版本:composer show --locked --format=plain(每行一个 vendor/name version
  • 生成可用于新环境安装的最小依赖清单:composer show --direct --format=plain(只列 requirerequire-dev 中声明的顶层包)
  • 若真需要类似 npm 的 flat 列表(含所有 transitive 依赖),得靠外部工具,比如 jq 解析 composer.lockjq -r '.packages[] | "(.name) (.version)"' composer.lock

别信网上搜到的 composer dump-autoload --optimizecomposer update --dry-run —— 它们跟导出列表完全无关。

composer.lock 是唯一权威依赖快照

真正能保证环境一致的,只有 composer.lock 文件本身。它包含每个包的 exact version、source type(git/dist)、shasum、require 映射等全部信息。

很多人试图用 composer show 结果去重建环境,结果发现版本对不上——因为没考虑 lock 里的 constraints、platform config、甚至 private repo 的 alias 设置。

  • 部署时应始终提交 composer.lock,并用 composer install(而非 update)还原
  • composer show --locked 输出的是 lock 里的数据,但格式不如直接读 lock 文件稳定
  • CI/CD 流程中,校验 composer.lock 是否过期,应该用 composer update --dry-run,而不是比对 show 输出

lock 文件一旦被手动编辑或 git 冲突后修复不当,整个依赖一致性就崩了——这点比命令怎么写重要得多。