composer show --tree 可直接查看已安装依赖的树形结构,反映 vendor/ 实际状态;加 --dev 包含开发依赖,-s 折叠重复路径;它不检测冲突,仅静态读取 installed.json。

composer install 后怎么立刻看到依赖结构
直接运行 composer show --tree,它会以缩进树形输出当前项目所有已安装包及其依赖链。不需要额外插件,也不依赖 lock 文件是否最新——只要 vendor/ 存在就能跑。
常见错误是先执行 composer update 再查图,其实没必要:树形结构反映的是实际安装结果,不是 composer.json 里写的理想状态。如果你刚 install 完,show --tree 就是最准的快照。
- 加
--dev参数可包含开发依赖(默认不显示) - 加
-s(short)能折叠重复路径,适合大项目快速扫视 - 注意它不校验版本冲突,只展示“当前装了什么”,和
composer why的因果逻辑不同
用 graphviz 生成可视化 PNG 图需要哪些前置条件
得先装系统级工具 dot(来自 Graphviz),再装 Composer 插件 graphviz ——但别用过时的 koala-creative/composer-graph,它不兼容 Composer 2.5+ 的插件机制。
推荐用官方认可的 bitexpert/composer-graph:composer global require bitexpert/composer-graph。它生成的 .dot 文件是标准格式,dot -Tpng vendor.graph.dot -o deps.png 就能转图。
- Windows 用户装 Graphviz 后记得把
dot.exe所在目录加进PATH,否则报错"dot" is not recognized - 生成的
.dot文件默认不含 dev 依赖,加--dev参数才包括 - 图太大时默认字体太小,可在命令后加
-Gfontsize=10调整全局字号
为什么 composer show --tree 看不到循环依赖或版本冲突
composer show --tree 是静态快照,只读 vendor/composer/installed.json,不触发依赖求解器。真正的冲突检测发生在 install 或 update 阶段,由 Solver 执行。
想定位循环引用或版本打架,得看 composer update --dry-run -v 的详细日志,或者直接触发失败:composer require some/package:dev-main,错误信息里会出现类似 Root package requires some/package dev-main -> satisfiable by some/package[dev-main] but these conflict with your requirements or minimum-stability.
- 循环依赖通常表现为 “A requires B, B requires C, C requires A” —— 这种不会在
show --tree中体现为环,只会平铺成三层 - 版本冲突常因
minimum-stability设置过严,或某包硬锁了php版本却和当前环境不匹配 -
composer depends和composer prohibits比show --tree更适合追根溯源
导出依赖数据给其他工具分析(比如安全扫描或 CI 流程)
别解析 composer show --tree 的文本输出,那不稳定。用 composer show --format=json 或 composer show --format=lock 获取结构化数据。
--format=json 返回每个包的 name、version、source、require 等字段,适合写脚本过滤;--format=lock 则输出类似 composer.lock 的 JSON,含哈希与平台配置,CI 中做一致性校验更可靠。
- CI 脚本里建议加
--no-dev避免把测试工具链混进生产依赖分析 - JSON 输出里
require字段是该包声明的依赖,而require-dev是它自己的开发依赖,别混淆层级 - 如果要对比两个环境的差异,用
composer show --format=json | jq '.[] | {name, version}' | sort提取关键字段再 diff
真正难的是理解“谁在什么时候引入了哪个版本的包”——composer why 和 composer depends 的组合比任何图都管用,但很多人只盯着图看,忘了去查具体路径上的约束条件。










