发布于2026-07-12 阅读(0)
扫一扫,手机访问
使用 composer show --tree 或 composer show -t 查看依赖树,需在项目根目录执行;Composer 2.5+ 用 -t 替代 --tree,配合 --no-dev 可过滤开发依赖,composer why --tree 定位冲突源头,composer graph 支持可视化依赖图。

在 ThinkPHP 项目里,依赖关系一旦乱起来,排查起来确实令人头疼。比如扩展包之间的嵌套层级,或者某个包突然爆出版本冲突,光靠猜肯定不行。好在 Composer 提供了几个很直观的查看依赖树的命令,只是版本不同、场景不同,用起来略有差异。下面把这些方法梳理一下,从最基础的文本树到可视化的图形工具,一条条说清楚。
这条命令直接读取 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 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 .
当项目里某个包(比如 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
这个命令不解析嵌套关系,而是直接扫描所有已安装包的 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。
文本树在遇到复杂嵌套时(比如多个 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
这样一来,不管项目依赖多复杂,都能一目了然。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8