composer show --tree 是最直接生成依赖关系报告的方式,但仅显示生产环境依赖,需加 --dev 查看开发依赖,输出过长时建议用 less 或重定向;它不体现 replace/conflict 逻辑和 provide 导致的隐形依赖,且无法导出树形 JSON,需结合脚本或第三方工具分析。
是最直接生成依赖关系报告的方式,但实际使用中常因输出过长、格式混乱或忽略开发依赖而误判真实依赖结构。
用
快速查看层级依赖
它会递归展开所有已安装包及其子依赖,按缩进表示依赖层级。默认只显示生产环境依赖(即不含
中的包)。
加
参数才能看到测试/构建类工具(如
、
)引发的整条依赖链
输出可能超过终端缓冲区,建议配合
或重定向到文件:
注意:某些包通过
或
干预了依赖解析,
不体现这些逻辑,仅展示最终解析结果
导出为 JSON 便于程序化分析
输出的是扁平列表,不带层级;真正能反映依赖图谱的是
的逆向视角,但 Composer 原生命令不支持导出完整树形 JSON。可行替代方案是:
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
用
+ 自定义脚本解析缩进(每两个空格 = 一层),适合简单审计
借助第三方工具:
,再运行
生成 Graphviz 可视化图
若需 CI 中自动检查,推荐用
先筛出显式声明的包,再对每个执行
拼接,避免漏掉条件性加载的依赖
警惕
和
导致的“隐形依赖”
例如
通过
声明自己“提供了”
的某些特性,其他包可能直接依赖这些特性而非具体 polyfill 包。此时
不会显示它,但它确实参与了依赖解析。
运行
类似命令无法触发,因为这不是版本冲突,而是能力模拟
检查
中的
和
字段,搜索
键可发现这类间接关联
升级时若移除某个 polyfill,需人工确认是否有包实际调用了被模拟的函数,否则运行时报
依赖报告不是静态快照——Composer 的 autoloading 规则、平台配置(如
)、甚至插件(如
)都可能改变最终加载行为。生成报告后,务必在目标环境中验证
是否真能加载关键类。
composer show --treecomposer show --treerequire-dev--devphpunitphpstanlesscomposer show --tree --dev | lessreplaceconflict--treecomposer show --format=jsoncomposer depends --treecomposer show --treecomposer global require edsonmedina/composer-dependency-graphcomposer dependency-graph --format=dotcomposer show --directcomposer show vendor/package --treeprovidereplacesymfony/polyfill-php80providephpcomposer show --treecomposer why-not php:8.0composer.lockpackagespackages-devprovideCall to undefined functionplatformhirak/prestissimovendor/autoload.php