composer show --tree 是最直接生成依赖关系报告的方式,但仅显示生产环境依赖,需加 --dev 查看开发依赖,输出过长时建议用 less 或重定向;它不体现 replace/conflict 逻辑和 provide 导致的隐形依赖,且无法导出树形 json,需结合脚本或第三方工具分析。

composer show --tree 是最直接生成依赖关系报告的方式,但实际使用中常因输出过长、格式混乱或忽略开发依赖而误判真实依赖结构。
用 composer show --tree 快速查看层级依赖
它会递归展开所有已安装包及其子依赖,按缩进表示依赖层级。默认只显示生产环境依赖(即不含 require-dev 中的包)。
- 加
--dev参数才能看到测试/构建类工具(如phpunit、phpstan)引发的整条依赖链 - 输出可能超过终端缓冲区,建议配合
less或重定向到文件:composer show --tree --dev | less - 注意:某些包通过
replace或conflict干预了依赖解析,--tree不体现这些逻辑,仅展示最终解析结果
导出为 JSON 便于程序化分析
composer show --format=json 输出的是扁平列表,不带层级;真正能反映依赖图谱的是 composer depends --tree 的逆向视角,但 Composer 原生命令不支持导出完整树形 JSON。可行替代方案是:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 用
composer show --tree+ 自定义脚本解析缩进(每两个空格 = 一层),适合简单审计 - 借助第三方工具:
composer global require edsonmedina/composer-dependency-graph,再运行composer dependency-graph --format=dot生成 Graphviz 可视化图 - 若需 CI 中自动检查,推荐用
composer show --direct先筛出显式声明的包,再对每个执行composer show vendor/package --tree拼接,避免漏掉条件性加载的依赖
警惕 provide 和 replace 导致的“隐形依赖”
例如 symfony/polyfill-php80 通过 provide 声明自己“提供了” php 的某些特性,其他包可能直接依赖这些特性而非具体 polyfill 包。此时 composer show --tree 不会显示它,但它确实参与了依赖解析。
- 运行
composer why-not php:8.0类似命令无法触发,因为这不是版本冲突,而是能力模拟 - 检查
composer.lock中的packages和packages-dev字段,搜索provide键可发现这类间接关联 - 升级时若移除某个 polyfill,需人工确认是否有包实际调用了被模拟的函数,否则运行时报
Call to undefined function
依赖报告不是静态快照——Composer 的 autoloading 规则、平台配置(如 platform)、甚至插件(如 hirak/prestissimo)都可能改变最终加载行为。生成报告后,务必在目标环境中验证 vendor/autoload.php 是否真能加载关键类。










