composer show -t 是查看全部已安装依赖(含嵌套子依赖)的唯一可靠方式,它读取 vendor/composer/installed.json 输出真实安装状态,缩进行表示子依赖,比 composer.json 更准确。

直接看已安装包版本,用 composer show;要列出所有依赖(含嵌套),加 -t 或 --tree 参数。
composer show 不加参数只显示当前项目信息
很多人输完 composer show 发现只看到项目名、描述、require 列表,没看到实际装了什么版本——因为默认不递归展开。它只展示 root package 的声明依赖,不是已安装的完整快照。
- 想查某个包的具体版本?用
composer show vendor/package-name,比如composer show monolog/monolog - 加
-s(--summary)能快速看到所有顶层依赖及其稳定版本号,但依然不含子依赖 - 如果包没装成功(比如被
replace或conflict拦住),show也不会报错,只会安静地不显示它——得靠composer install --dry-run验证是否真能装上
列出全部已安装依赖(含子依赖)必须用 -t
composer show -t 是唯一可靠的方式,它读取 vendor/composer/installed.json,按依赖树结构输出真实安装状态。这比看 composer.json 准确得多,尤其在用了 minimum-stability 或 prefer-stable 后,实际装的版本常和声明不一致。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 输出里带缩进的行就是子依赖,比如
guzzlehttp/psr7在guzzlehttp/guzzle下面,说明它是被拉进来的 - 如果某包显示
not installed,通常是因为它被replace了(如symfony/polyfill-*常被symfony/symfony替换),不是漏装 - 终端宽度不够时树形会折行混乱,加
--no-ansi反而更易读:composer show -t --no-ansi
想导出纯列表(不含树结构)用 --format=plain
CI 脚本或需要 grep 匹配时,-t 的缩进格式反而难处理。--format=plain 输出扁平化列表,每行一个 vendor/name version,适合后续解析。
- 命令是:
composer show --format=plain,注意它默认仍只显示顶层依赖 - 要导出全部(含子依赖)的纯列表,得组合使用:
composer show -t | grep '^[a-z0-9\-]/[a-z0-9\-]' | awk '{print $1 " " $2}' | sort -u - 这个管道方式依赖终端输出格式,不同 Composer 版本(如 2.2 vs 2.5)对空格和缩进处理略有差异,生产环境建议优先用
composer show -t人工核对关键包
真正容易被忽略的是:Composer 不会主动告诉你哪些包被 conflict 规则挡在门外,也不会标出哪些是通过 provide 机制“假装存在”的。查版本不能只信 show,关键包最好再确认下 vendor/autoload.php 是否真加载了它对应的 vendor/vendor/name/ 目录。










