Composer怎么查看包的依赖树形图 tree命令可视化依赖【工具】
发布时间 - 2026-02-01 00:00:00 点击率:次composer tree 命令默认不存在,因它并非 Composer 内置命令,而是历史插件遗留混淆;官方推荐使用 composer show --tree 查看已安装依赖树,支持指定包名(如 monolog/monolog)并显示其实际依赖路径。
composer tree 命令为什么默认不存在
因为 composer tree 不是 Composer 内置命令,它是 composer-cli 插件(更准确说是 hirak/prestissimo 时代遗留的混淆)——真正可用的是第三方插件 phpstan/dependency-analyser 或更主流的 deptrac,但最轻量、最直接的方案其实是 Composer 自带的 composer show --tree。
常见错误现象:composer tree 报错 Command "tree" is not defined,或装了旧版插件后与 Composer 2+ 不兼容,导致 composer update 失败。
-
composer show --tree是官方支持、无需安装插件、开箱即用的方式 - 它只显示当前
composer.lock中已解析的实际依赖(不是composer.json的声明式依赖) - 不支持过滤、缩进控制或导出为图片,但足够快速定位循环引用或意外升级路径
如何用 composer show --tree 查看指定包的依赖路径
比如你想知道 monolog/monolog 是被谁拉进来的,以及它又带了哪些子依赖:
composer show --tree monolog/monolog
输出类似:
monolog/monolog 2.10.0
├── php (>=7.2.5)
├── psr/log (1.1.4)
└── symfony/polyfill-php80 (v1.29.0)
└── php (>=7.2.5)
注意点:
- 参数必须是已安装的包名(区分大小写),
composer show --tree foo/bar对未安装包会报Package not found - 不加包名时显示整个依赖树,可能极长;建议配合
grep或less:composer show --tree | grep -A5 "guzzlehttp" -
--tree不识别--depth参数,想限制层级只能靠外部工具截断
替代方案:用 deptrac 生成可视化图(dot/svg)
当需要导出为图片、分析跨包调用、或排查“为什么这个 dev-only 包出现在生产环境”时,composer show --tree 就不够用了。这时推荐 deptrac(PHP 写的静态分析工具,专注依赖规则):
安装:
composer global require sensiolabs-de/deptrac
初始化配置:
deptrac init
然后运行分析(默认只检查 autoload 部分,如需完整依赖关系,得手动在 deptrac.yaml 中添加 collector: composer 规则)
容易踩的坑:
-
deptrac默认不读取composer.lock,它分析的是代码中use和new的实际引用,和 Composer 运行时依赖不是一回事 - 想生成 SVG 图需额外装 Graphviz,并确保
dot命令在 PATH 中 - 对大型项目,首次运行可能卡住几分钟,且报告里大量“uncovered”不代表有问题,只是未定义规则
为什么别轻易用 composer-visualizer 这类在线工具
有些网页工具(如 composer-visualizer.herokuapp.com)要求你上传 composer.json 或 composer.lock,看似方便,但存在两个硬伤:
-
composer.lock包含包的 exact commit hash 和 dist URLs,可能暴露内部私有包结构或镜像地址 - 它们用 PHP 在服务端执行
composer install --no-scripts --no-plugins模拟解析,但无法还原你本地的平台配置(如platform.php)、插件行为或自定义 installer,结果常有偏差 - 一旦项目用了
pathrepository 或package类型定义,这些工具基本无法处理
真正需要图形化时,优先本地跑 composer show --tree + 导出文本,再用 VS Code 插件(如 “Tree

composer why-not vendor/package:version 更快。
# php
# js
# json
# composer
# svg
# php8
# app
# 工具
# vs code
# 为什么
# red
# less
# 循环
# 的是
# 用了
# 不存在
# 会报
# 首次
# 出现在
# 推荐使用
# 你想
# 不代表
# 它是
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何构建满足综合性能需求的优质建站方案?
微信小程序 配置文件详细介绍
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
详解阿里云nginx服务器多站点的配置
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
Linux系统运维自动化项目教程_Ansible批量管理实战
如何彻底删除建站之星生成的Banner?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
浅述节点的创建及常见功能的实现
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何用PHP快速搭建CMS系统?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
如何在建站之星网店版论坛获取技术支持?
详解jQuery中的事件
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
如何在景安服务器上快速搭建个人网站?
浅谈Javascript中的Label语句
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Laravel Docker环境搭建教程_Laravel Sail使用指南
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
JS弹性运动实现方法分析
微信小程序 input输入框控件详解及实例(多种示例)
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
如何用虚拟主机快速搭建网站?详细步骤解析
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
SQL查询语句优化的实用方法总结
JavaScript如何实现音频处理_Web Audio API如何工作?
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
长沙做网站要多少钱,长沙国安网络怎么样?
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
javascript读取文本节点方法小结
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
简历没回改:利用AI润色让你的文字更专业
如何在新浪SAE免费搭建个人博客?
如何用狗爹虚拟主机快速搭建网站?
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
Laravel怎么上传文件_Laravel图片上传及存储配置

