跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何利用Composer生成项目的依赖关系报告

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

相关文章