当前最稳定查看完整依赖树的命令是composer show --tree,它读取vendor/和composer.lock的真实快照,在项目根目录执行可展开全部已安装包及其层级依赖关系,未安装包不会显示,重复出现的包表示被多处引用而非实际重复安装。

直接用 composer show --tree 就能看依赖树,但想真正定位冗余包或验证镜像是否生效,得配合其他命令和配置检查。
怎么看当前项目的完整依赖树?
composer show --tree 是最直接的方式,它按层级展开所有已安装包及其依赖。注意两点:
- 只显示已安装的包(即
vendor/里实际存在的),未安装但写在composer.json里的不会出现 - 如果某包被多个父包引用,它会在每个路径下重复出现,不代表装了多份——Composer 会自动去重
- 加
-s参数(composer show -s --tree)可显示版本号,避免因别名或分支导致误判
怎么识别并删除没用的冗余包?
冗余包通常指:被 require 过但实际代码里没调用、或已被其他包间接依赖而显式 require 属于重复声明。判断逻辑是:
- 先运行
composer why <package-name></package-name>,看谁依赖它;如果返回空,说明没人用它(但要注意 autoload 或插件类可能静态加载) - 再查
git grep -i '<package-name>'</package-name>或 IDE 全局搜索类名/命名空间,确认源码里真没引用 - 执行
composer remove <package-name></package-name>后,跑一遍单元测试和关键流程,防止某些包虽未显式 use 却通过反射、配置或事件机制被触发
怎么确认镜像配置生效且没被覆盖?
镜像是否起作用,不能只看 composer.json 里的 repositories,更要检查实际请求发到了哪:
- 运行
composer config --global repos.packagist和composer config repos.packagist,分别看全局和项目级配置;若项目里设了"packagist.org": false却没配替代镜像,就会退回到官方源 - 加
-vvv参数装包(如composer install -vvv),日志里会打印每条 HTTP 请求的 URL,确认域名是不是你配的镜像地址(比如https://mirrors.aliyun.com/composer) - 注意 Composer 2.2+ 默认启用
packagist.org的 HTTPS 代理机制,即使你关了 packagist,它仍可能 fallback 到官方元数据接口,需用composer config --unset repos.packagist彻底移除
依赖树不是静态快照,它随 composer.lock、PHP 版本、平台配置实时变化;删包前务必确认 autoload 段没手工加过类映射,否则 composer dump-autoload 也救不回来。


















