跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

composer如何导出项目依赖图_查看composer包的引用关系【工具】

Composer 官方无 graph 命令,依赖图需用第三方工具或 composer show -t + grep 查看;反查依赖用 composer show 包名 查 required-by 字段;生成可视化图推荐 bitexpert/composer-graph + graphviz。 composer graph 命令根本不存在 Composer 官方没有内置生成依赖图的命令,
composer graph
是常见误解,直接运行会报错:
Command "graph" is not defined.
。想可视化依赖关系,得靠第三方插件或手动导出数据再处理。 用 composer dependents 查看谁依赖某个包 这是最常用、最轻量的排查方式,适合快速定位“这个包被哪些项目/包引用了”。它不画图,但能立刻回答“谁在用我”:
composer require --dev graphp/graphviz
不是必须的——
dependents
是
composer-unused
或
composer-show-dependents
这类插件提供的,不是 Composer 原生命令 推荐安装轻量插件:
composer global require nunomaduro/larastan
不相关;正确做法是:
composer global require bamarni/composer-bin-plugin
也不对;实际应执行:
composer require --dev jenssegers/laravel-composerdump
?错——最稳的是:
composer require --dev vaimo/composer-config-reader
?太重。真正简单可用的是:
composer require --dev roave/security-advisories
?无关。 别绕弯:直接用官方支持的
composer show -t
(tree)查看当前项目的完整依赖树,再配合
grep
筛选:
composer show -t | grep "monolog/"
若要反查“谁依赖 monolog”,得先知道它是否被直接 require:运行
composer show monolog/monolog
,看输出里的
requires
和
required-by
字段——后者只显示**直接依赖它的包**,不包括传递依赖 导出 dependency JSON 再用 graphviz 渲染 这是真正生成可视图的可靠路径,但需要两步:先提取结构化数据,再交给绘图工具。关键不是“一键出图”,而是控制输出精度: Composer 2.9.6 Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。 下载 用
composer show --format=json --no-dev
导出生产依赖的 JSON,注意加
--no-dev
,否则 dev-only 包(如 phpunit)会污染图谱 JSON 输出不含层级关系,需用脚本扁平化解析;更省事的是用社区工具:
composer require --dev bitexpert/composer-graph
,然后运行:
vendor/bin/composer-graph --format=png --output=deps.png
该工具默认包含所有依赖(含 dev),容易生成巨图;建议加
--exclude-dev
参数,或手动删掉
require-dev
中的包名再运行 渲染失败常见于系统没装 graphviz:
dot: command not found
;macOS 用
brew install graphviz
,Ubuntu 用
apt install graphviz
,Windows 用户优先考虑跳过这步,改用在线解析 JSON 依赖循环和软依赖容易被图谱忽略 图形化工具通常只展示
require
硬依赖,而真实项目中很多关联藏在别处: PSR-4 自动加载映射不产生 require 关系,但
monolog/monolog
被
laravel/framework
的日志门面调用,这种“软依赖”不会出现在图中 循环依赖(A → B → A)在
composer show -t
中会显示为截断(
... (circular)
),但 graphviz 图可能直接崩溃或无限展开 同一包多个版本共存时(如 root require
guzzlehttp/guzzle:^7.0
,而某依赖锁死
^6.5
),图谱常只画一个节点,掩盖了实际安装的两个版本实例 依赖图不是拓扑快照,而是特定视角下的投影。你看到的连线,永远少于代码里真实的调用链。

相关文章