composer show --tree 不是架构审计工具,因为它仅输出带缩进的文本而非图结构,无法标识冲突、暴露循环依赖或反映运行时调用链,可视化需依赖外部工具如 composer-dependency-graph 或 composer-visualize。

不能靠 composer show --tree 做架构审计,它不生成图、不标冲突、不暴露循环依赖——可视化必须用外部工具链。
为什么 composer show --tree 不是架构审计工具
它只是带缩进的文本展开,不是图结构数据:
- 缩进只反映 require 声明层级,不表示加载顺序或运行时调用链
- 同一包(如 guzzlehttp/guzzle)在 2 级和 5 级重复出现,你得手动比对括号里的版本号(如 [7.4.0] 和 [7.8.1])才能判断是否真冲突
- 终端换行错位时缩进直接失效,less -S 是刚需
- --no-dev 必须放在 -t 前面,写成 composer show -t --no-dev 就会静默失效
- 输出里带 [dev-master] 或 [7.8.1] 的才是实际安装版本,不是 composer.json 里写的约束
composer-dependency-graph:轻量交互式 HTML 图
目前最省事、无需 Graphviz、开箱即用的方案,适合本地快速探查:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 安装:
composer require --dev kylekatarnls/composer-dependency-graph - 生成:
./vendor/bin/composer-dependency-graph,默认输出graph.html - 打开后支持缩放、拖拽、点击节点展开/收起,悬停显示版本号和来源
- 加
--filter="topthink/*"可聚焦 ThinkPHP 生态,避免图过密 - 图中出现双向箭头闭环 → 实锤循环依赖,立刻查
composer.json里哪两个包互相require
composer-visualize + Graphviz:导出 SVG/PNG 静态图
适合嵌入文档、做培训、或需要无损缩放的场景,但 Graphviz 是硬依赖:
- 先装系统级 Graphviz:
brew install graphviz(macOS)或apt install graphviz(Ubuntu) - 全局安装:
composer global require bitexpert/composer-visualize,确保~/.composer/vendor/bin在$PATH中 - 生成 SVG:
composer visualize --format=svg --output=deps.svg - 加
--max-depth=2防止图爆炸;加--dev才包含require-dev(很多循环依赖藏在这里) - 报
dot command not found?不是 Composer 问题,是 Graphviz 没装或路径没配对
真正麻烦的是私有包或 "type": "path" 仓库——composer-unused 默认跳过它们,得手动加 --scan-path;而 composer-dependency-graph 对 path repo 支持更稳。别指望 composer.lock 或 vendor/autoload.php 能提供依赖路径信息,它们根本不存这个字段。










