composer show --tree(或composer show -t)命令不经过镜像源,仅读取本地vendor/和composer.lock,反映已安装的真实依赖树;镜像仅在install/update阶段加速下载,不影响分析命令。

依赖树命令本身不走镜像,但安装阶段才用得到
Composer 的 composer show --tree(或 composer show -t)这类分析命令**完全不经过镜像源**——它只读取本地 vendor/ 和 composer.lock,和你配的镜像无关。中文镜像(如阿里云、腾讯云、华为云)只在 composer install 或 composer update 时起作用,负责加速包下载。想看依赖层级,先得有真实安装状态;没装进 vendor/,树就是空的。
常见错误现象:composer show --tree 报错 “Could not find package” 或输出为空 —— 90% 是因为还没运行过 composer install,vendor/ 目录压根不存在。
- 确认是否已安装:运行
ls vendor/,非空才可查树 - 确认镜像是否生效:执行
composer config -g repo.packagist,应返回类似{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 如果刚换镜像,记得先
composer clear-cache,否则旧缓存可能干扰安装
精准查某条链路必须加参数,不能只跑 composer show -t
默认不加参数的 composer show -t 会从项目根开始展开全部依赖,动辄上千行,缩进嵌套深了根本没法人工数。中文镜像不影响这个行为,但能帮你更快完成前置安装,让树变得“可查”。
- 查自己直接写的依赖:用
composer show -t --direct,只显示composer.json中require和require-dev里明写的包 - 聚焦某个包的下游链:比如查 Guzzle 的依赖路径,必须写全名
composer show -t guzzlehttp/guzzle,漏掉/或大小写错误就查不到 - 生产环境审查必加
--no-dev:composer show --no-dev -t .,否则phpunit带进来的旧版symfony/polyfill会混入结果 - 终端宽度不够导致缩进错位?加
| less -S横向滚动:composer show --no-dev -t . | less -S
composer show --who 比 composer depends 更稳,尤其在镜像环境下
很多人想查 “谁用了 psr/log”,顺手敲 composer depends psr/log,结果为空或报错。这不是镜像的问题,是命令本身的限制:depends 在 Composer 2.4+ 默认关闭,且只扫描你项目 composer.json 的显式声明,不读 vendor/ 里包的 composer.json。而中文镜像安装的包,结构和官方一致,show --who 才是真正可靠的方式。
- 查直接依赖者:
composer show --who psr/log - 排除开发依赖:
composer show --who --no-dev monolog/monolog - 结果为空 ≠ 没人用:可能是通过
provide虚拟提供(如monolog/monolog提供psr/log-implementation),此时应回头跑composer show -t . | grep -B2 -A2 "psr/log"
深层嵌套或冲突时,文本树已到极限,该切可视化
当 composer show -t 输出超过 200 行,或同一包(如 symfony/console)在 5 个不同缩进深度重复出现,手动比对版本几乎不可能。中文镜像加速了安装,但没解决分析瓶颈——这时候必须离开终端文本,转向 Graphviz 可视化。
实操路径很明确:
- 先确保已安装:
composer install(这时中文镜像才真正起效) - 生成依赖图:
composer-unused --format=dot | dot -Tpng -o deps.png,需要提前装graphviz - 箭头方向是关键:
A → B表示 A 依赖 B,不是反过来 - 注意
composer-unused不是玩具,它能准确识别 Laravel + Symfony 多版本共存时的真实调用路径,比纯文本树更贴近运行时事实
缩进只是声明层级的线性投影,而真实项目里,一个包被多个上游拉入、版本被强制降级、虚拟包提供逻辑绕过 require 字段——这些复杂点,只有跳出文本树才能看清。











