composer show --tree 最直观展示完整依赖树,缩进表示层级,实时反映 vendor 状态;composer show --format=json 或 --format=short 可导出结构化或扁平化清单,composer.lock 才是部署精确依据。

直接用 composer show --format=json 或 composer show -s 就能拿到结构化依赖清单,不需要额外插件或脚本。
导出完整依赖树(含嵌套关系)
想看清谁依赖了谁、版本是否冲突,composer show -t 最直观。它按树形展开,缩进表示依赖层级,比平面列表更能暴露隐式依赖问题。
-
composer show -t输出实时解析结果,反映当前vendor/状态,不是仅读composer.json - 如果某包被多个路径引入(比如 A→B→C 和 D→C),树形输出会重复显示 C,这是正常行为,说明存在多路径依赖
- 加
--no-dev可排除开发依赖:composer show -t --no-dev,适合生成生产环境清单
导出纯包名+版本的简洁列表(适合审计或同步)
安全扫描或 CI 检查常需要扁平化清单,composer show --format=short 是最轻量的选择,每行一个 vendor/name version。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
-
composer show --format=short > deps.txt直接保存为文本,方便 Git 跟踪或 diff - 若需 JSON 格式便于程序解析,用
composer show --format=json,字段包括name、version、type、require(直接依赖)等 - 注意:
--format=json不包含 dev 依赖,如需包含,得加--dev参数,否则会漏掉phpunit这类工具
导出 lock 文件里锁定的精确版本(部署/复现必备)
composer.lock 才是实际安装依据,composer show 显示的是“可满足的版本范围”,不是最终安装版本。
- 直接读
composer.lock更可靠,其中packages数组是运行时安装的包,packages-dev是开发依赖 - 用
jq提取可读列表:jq -r '.packages[] | "\(.name) \(.version)"' composer.lock(需安装jq) - 不依赖外部工具?用 PHP 一行命令:
php -r '$l=json_decode(file_get_contents("composer.lock")); foreach($l->packages as $p) echo "$p->name $p->version\n";'
真正容易被忽略的是:导出结果是否反映 vendor/ 实际状态,还是仅基于 composer.json 推理。只要没执行 composer install 或 composer update,composer show 的结果可能和 vendor/ 不一致——尤其当 composer.lock 存在但未应用时。

















