Composer 依赖图需借助 composer-visualize 和 graphviz 生成,因 Composer 自身不支持绘图且 text 树无法识别循环引用、版本冲突与平台约束;composer depends/dependents 仅用于文本诊断影响范围,不生成图像也不校验兼容性。

Composer 本身不提供依赖图生成功能,必须借助第三方工具;graphviz 是底层必需依赖,缺它再好的 PHP 工具也出不了图。
为什么 composer show --tree 不够用
它只做文本展开,层级深了根本没法快速识别循环引用、重复加载或可选依赖的激活路径。比如 monolog/monolog 被 laravel/framework 和 phpunit/phpunit 同时拉入,但文本树里看不出哪个版本最终胜出,也看不到 ext-json 这类平台约束是否满足。
常见错误现象:composer install 成功但运行时报 Class not found,实际是依赖图里某分支被意外剪枝 —— 文本树完全无法暴露这类问题。
composer dependents 和 composer depends 的真实用途
这两个命令不是画图工具,而是定位影响范围的诊断指令:
-
composer depends vendor/package查谁依赖了指定包(适合删包前评估破坏面) -
composer dependents vendor/package查该包被哪些其他包间接依赖(适合判断能否安全升级)
它们输出纯文本,不生成图像,也不校验兼容性。别指望靠它们看出 symfony/console v5 和 v6 在同一项目里是否共存 —— 它只告诉你“有依赖”,不告诉你“是否冲突”。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
真正能出图的组合:composer-visualize + graphviz
目前最稳定可用的是 composer-visualize(注意不是 composer-graph,后者已多年未维护且不支持 Composer 2.2+):
- 先全局安装:
composer global require bitexpert/composer-visualize - 确保系统已装
graphviz(macOS 用brew install graphviz,Ubuntu 用apt install graphviz) - 在项目根目录运行:
composer visualize --format=png --output=deps.png
关键参数说明:
-
--format=svg比png更适合放大查看,但需浏览器打开 -
--filter=vendor/name可聚焦单个包的上下游,避免全图信息过载 - 默认会忽略
require-dev,加--dev才包含测试依赖(很多循环引用就藏在这里)
性能提示:含 100+ 包的项目生成图可能卡顿,建议先用 composer show --direct 锁定主干依赖再过滤生成。
图出来之后,重点看哪几处
可视化不是为了好看,是为快速定位三类硬伤:
- 箭头双向闭环 → 实锤循环依赖,必须砍掉其中一端的
require - 同一包出现多个版本节点(如
guzzlehttp/guzzle:7.4和7.8并存)→ 检查composer.lock是否被手动改过,或存在replace冲突 - 某个
ext-xxx节点悬空无入边 → 说明该扩展没被任何包声明为必需,可能是遗留配置
最容易被忽略的是 dev 依赖带来的隐式耦合:图里 phpunit 拉进来的 sebastian/exporter 如果反向依赖了你的 src/ 目录,意味着单元测试代码已和业务逻辑缠绕,重构时极易断裂。

















