ThinkPHP怎样查看Composer依赖树_Composer依赖树查看方法【详解】
PhpStorm 是 JetBrains 推出的专业 PHP 集成开发环境,可在 Mac 上完成代码编写、智能检查、重构、调试、测试和数据库管理。它支持主流 PHP 框架、Composer、Git、Docker 与远程解释器。
Composer提供多种依赖树查看方法,用于分析ThinkPHP项目的依赖关系:2.2至2.4版本使用composershow--tree,2.5以上改用-t;添加--no-dev可排除开发依赖;composerwhy--tree能精准定位冲突源头;composergraph则生成可视化依赖图。这些命令让开发者快速理清依赖结构,有效解决版本冲突问题。
使用 composer show --tree 或 composer show -t 查看依赖树,需在项目根目录执行;Composer 2.5+ 用 -t 替代 --tree,配合 --no-dev 可过滤开发依赖,composer why --tree 定位冲突源头,composer graph 支持可视化依赖图。

在 ThinkPHP 项目里,依赖关系一旦乱起来,排查起来确实令人头疼。比如扩展包之间的嵌套层级,或者某个包突然爆出版本冲突,光靠猜肯定不行。好在 Composer 提供了几个很直观的查看依赖树的命令,只是版本不同、场景不同,用起来略有差异。下面把这些方法梳理一下,从最基础的文本树到可视化的图形工具,一条条说清楚。
一、使用 composer show --tree 查看完整依赖树
这条命令直接读取 vendor/ 目录和 composer.lock 中的真实快照,适用于 Composer 2.2.0 至 2.4.x 版本。输出是缩进式的文本树,直观展示 ThinkPHP 及其扩展(比如 topthink/think-queue、topthink/think-swoole)的嵌套层级关系。
操作步骤很简单:打开终端,进入 ThinkPHP 项目的根目录(就是包含 composer.json 的那个目录),然后执行:
composer show --tree
如果只关心核心框架,可以指定包名:
composer show --tree topthink/framework
要是想排除开发依赖,净化分析环境,加上 --no-dev:
composer show --no-dev --tree
二、使用 composer show -t 适配 Composer 2.5+
Composer 2.5.0 及以上版本已经彻底移除了 --tree 参数,这时候必须用短参数 -t。二者功能等价,但后者在新版本中稳定性更好。特别适合那些因为升级 Composer 导致原命令失效的 ThinkPHP 项目。
先确认版本:composer --version,如果 ≥ 2.5.0,就启用这个方案。然后项目根目录执行:
composer show -t .
(那个点号代表当前项目,用来展开全部依赖)
想查看特定扩展包,比如 think-orm 的下游依赖:
composer show -t topthink/think-orm
需要过滤开发依赖时,注意 --no-dev 必须放在 -t 前面:
composer show --no-dev -t .
三、使用 composer why --tree 追溯依赖源头
当项目里某个包(比如 psr/log 或 symfony/console)引发版本冲突时,光知道它被引入了还不够——必须定位到项目自身的 composer.json 中哪一行 require 声明了它。--tree 参数可以展开完整路径,直到末尾出现 your-project-name dev-main 或 [dev] 标记。
执行:
composer why --tree psr/log
观察输出末尾是否指向 topthink/framework 或者你自己的项目名。如果怀疑是开发依赖引入的,保留 [dev] 标识来识别来源:
composer why --tree phpunit/phpunit
对于还没安装但需要预判依赖链的包,加上 --remote 参数远程查询:
composer why --remote --tree league/flysystem
四、使用 composer show --who 查找直接依赖者
这个命令不解析嵌套关系,而是直接扫描所有已安装包的 require 和 require-dev 字段,精准列出哪些上游包显式声明了某个依赖。适用于快速判断 ThinkPHP 扩展是否主动引入了冲突组件(比如 overtrue/lara vel-wechat 对 psr/log 的硬依赖)。
运行:
composer show --who psr/log
结果里如果出现 topthink/think-swoole,说明这个扩展就是直接声明方。排除开发依赖:
composer show --who --no-dev psr/log
如果返回为空,不代表没人使用——可能是通过虚拟包提供的(比如 "provide": {"psr/log": "*"}),这时候回查全局依赖树更稳妥:
composer show -t . 然后手动搜索 psr/log。
五、使用 composer graph 生成可视化依赖图
文本树在遇到复杂嵌套时(比如多个 ThinkPHP 插件交叉依赖同一个 Symfony 组件),辨识起来相当吃力。这时可以借助图形化工具。composer graph 基于 Graphviz 渲染有向图,能清晰展示依赖流向与冲突节点。
先全局安装图形化插件:
composer global require baethon/composer-graph
确保系统已经装了 graphviz:macOS 上 brew install graphviz;Ubuntu/Debian 上 sudo apt install graphviz;Windows 用户从官网下载并勾选「Add Graphviz to the system PATH」。
然后在 ThinkPHP 项目根目录运行:
composer graph --format=png --output=deps.png
这会生成一张 PNG 图像。如果想排除开发依赖,让图形更简洁:
composer graph --no-dev --format=png --output=prod-deps.png
这样一来,不管项目依赖多复杂,都能一目了然。










































