CI中跑不出依赖图需先确认dot和vendor是否就位:90%因Graphviz未安装或dot不在$PATH,Linux需apt-get install graphviz,macOS建议用预装镜像,Windows需手动添加dot.exe到PATH;vendor目录必须存在且完整,否则插件静默失败;composer show --no-dev -t .是CI中最可靠的原生命令,不依赖外部工具,可暴露真实冲突。

CI 中跑不出依赖图?先确认 dot 和 vendor 是否就位
在 CI 环境里执行 composer graph 或 composer-dependency-graph 报 failed to execute dot,90% 是因为系统没装 Graphviz,或 dot 命令不在 $PATH。这不是 PHP 错误,是环境缺失。
- Linux(GitHub Actions / GitLab CI):必须显式安装,例如
apt-get update && apt-get install -y graphviz - macOS(CircleCI):用
brew install graphviz,但注意 Homebrew 在 CI 中常被禁用,建议改用预装镜像或手动下载二进制 - Windows(Azure Pipelines):Graphviz 安装器默认不加 PATH,需手动追加
C:\Program Files\Graphviz2.48\bin\dot.exe到环境变量 -
vendor/目录必须存在且完整——CI 中若跳过composer install或用了--no-scripts,composer-dependency-graph会静默失败或输出空图
为什么 CI 里 composer show --tree 比图形更可靠
composer show -t . 不依赖任何外部命令,只读 vendor/ 和 composer.lock,是 CI 中唯一能稳定输出依赖快照的原生命令。它不画图,但能暴露真实冲突点。
- 加
--no-dev必须放在-t前面:composer show --no-dev -t .,否则 dev 包仍混入,干扰生产链路判断 - 同一包(如
symfony/event-dispatcher)在不同缩进层级反复出现,说明被多个上游包引入;此时立刻查版本:composer show symfony/event-dispatcher,看是否真存在多版本共存 - 终端宽度受限时缩进错乱,CI 日志里尤其明显——改用
composer show --no-dev -t . | head -n 200截断查看关键段,比全量更有效 - 若某包完全不出现,不是“没依赖”,而是它没进
composer.lock—— 先跑composer update --dry-run看解析失败点,再定位问题源头
composer-dependency-graph 在 CI 中的实用参数组合
全量渲染依赖图在 CI 中毫无意义,100+ 节点的 PNG 图既难上传又难审查。真正有用的,是带过滤的轻量图。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 生成可审查的 SVG(非 PNG):
composer-dependency-graph --format=svg --output=deps.svg --max-depth=2,SVG 可直接在浏览器中搜索、缩放,适合嵌入 CI 报告页面 - 聚焦主干包:
--filter="laravel/framework|guzzlehttp/guzzle|monolog/monolog",用管道符分隔多个关键词,避免图谱爆炸 - 排除干扰项:
--exclude="phpunit,phpstan,laravel/pint,friendsofphp/php-cs-fixer",这些 dev 工具链常拉入旧版 polyfill,污染核心链路 - 加
--dev参数仅在排查 PHPUnit 引入的冲突时启用,日常构建应关闭,否则图中 70% 节点都和运行时无关
依赖图不能替代 composer update --dry-run
所有可视化工具输出的图,都是基于当前 composer.lock 的静态快照。它告诉你“现在是什么样”,但从不回答“如果我升级 X,会发生什么”。
- 当
composer show -t显示某包版本偏低,别急着删——先跑composer update --dry-run --with-all-dependencies vendor/package,看它是否触发连锁降级 - 图里红色节点标出版本冲突,但不告诉你哪个约束在作祟。
composer prohibits vendor/package:3.0才能准确定位是哪个require字段锁死了版本 - CI 中自动生成的依赖图,建议只作为辅助证据,而非决策依据。真正影响部署的,永远是
composer install实际执行结果,不是图上的箭头粗细或节点颜色
图越漂亮,越容易让人忽略 composer.lock 文件本身才是唯一真相源。CI 里生成的每一张图,都应该附带对应时刻的 composer.lock SHA256 校验值——否则它只是张好看的快照,不是可复现的分析依据。

















