应使用composer show -t --no-dev | less -s横向滚动避免缩进错位,或加包名聚焦如composer show -t guzzlehttp/guzzle;可视化首选composer-dependency-graph生成交互式html图,无需graphviz。

composer show -t 输出太乱,怎么快速定位关键路径
别硬读缩进树——composer show -t 默认输出是全量依赖快照,但终端宽度一窄就错位,同一包在不同缩进反复出现,根本没法判断谁拉进了谁。真正实用的组合是:composer show -t --no-dev | less -S,横向滚动避免换行干扰层级;加包名聚焦:composer show -t guzzlehttp/guzzle 只看它下游,省去手动翻找。
注意参数顺序:--no-dev 必须放在 -t 前面,写成 composer show -t --no-dev 会失效或报错;点号 . 表示当前项目全量树,不加就只显示 root 直接依赖。
- 看到
symfony/console [6.4.0]和symfony/console [5.4.22]同时存在?说明有版本冲突,得立刻查哪个上游包锁了旧版 -
[dev-master]或[7.8.1]是实际安装版本,不是composer.json里写的约束,括号内容才是真相 - 刚改完
composer.json就跑show -t,新包不会出现——先composer update同步composer.lock
想看图,但不想装 Graphviz 怎么办
用 composer-dependency-graph,零系统依赖,纯 HTML + JS,开箱即用。它不靠 dot 命令,不用装 Graphviz,适合 CI 环境或临时排查。
安装:composer require --dev kylekatarnls/composer-dependency-graph;生成:./vendor/bin/composer-dependency-graph,默认输出 graph.html。打开后支持拖拽、缩放、悬停看版本和来源,加 --filter="guzzlehttp/*" 可过滤命名空间。
- 图里出现双向箭头闭环?实锤循环依赖,立刻查
composer.json里哪两个包互相require - 节点颜色无特殊含义,但点击可展开/收起子依赖,比静态图更易聚焦
- 如果图为空,先确认
vendor/和composer.lock是否完整——它读的是已安装状态,不是composer.json的声明
composer depends 查不到包,到底卡在哪
composer depends 不是模糊搜索工具,它只扫描当前项目 composer.json 中显式声明的 require 和 require-dev,完全不读 vendor/ 里包的 composer.json。查不到常见原因很具体:
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 包名大小写或斜杠错:必须用
monolog/monolog,不能是Monolog/monolog或monolog - 该包只是子依赖(比如
laravel/framework → symfony/console → psr/log),没被任何顶层包直接require -
COMPOSER_NO_DEV=1或没加--dev,而目标包只在require-dev里 - Composer 版本低于 2.5:
composer --version确认,旧版只能退回到composer show --tree | grep手动上溯
真要查“谁悄悄带进来的”,优先用 composer why --tree vendor/package-name,结尾出现 your-project-name dev-main 才说明是你自己写的。
导出 SVG/PNG 静态图,为什么 dot 报错
composer visualize 或 composer graph 报 failed to execute dot,99% 是系统级问题,不是 Composer 配置错。Graphviz 是独立系统工具,PHP 包装不了它。
Mac 用户:brew install graphviz;Ubuntu/Debian:sudo apt install graphviz;Windows 安装时务必勾选「Add Graphviz to the system PATH」。装完运行 dot -V 应能输出版本号。
-
which dot和echo $PATH对不上?重启终端或重配 shell profile - CI 环境中
vendor/可能为空,先composer install --no-interaction再绘图 - 图太密看不清?加
--max-depth=2限制层级,或--exclude="phpunit,laravel/pint"排除开发工具链
真正容易被忽略的是:所有可视化方案都依赖 vendor/ 和 composer.lock 的一致性——手动删过包、或改了 composer.json 没 update,图就是错的。










