composer show 无输出最常见原因是 vendor 目录不存在或被删除,因该命令仅读取 vendor/composer/installed.json,不回退到 composer.lock,也不联网校验;查依赖树须用 --tree,全局包需用 composer global show。

直接运行 composer show 就能列出当前项目已安装的顶层依赖包,但必须在含 vendor/ 和 composer.json 的项目根目录下执行——没 vendor 目录时命令会静默失败或返回空,它不回退到 composer.lock。
为什么 composer show 什么都没输出?
最常见原因是:vendor 目录不存在或被删了。这个命令只读 vendor/composer/installed.json,不联网、不解析 composer.lock,也不校验依赖是否满足。
- 刚初始化项目但还没跑
composer install→ 没vendor,show必然为空 - 手动删过
vendor或清过缓存 → 需重装:composer install --no-dev(如果不需要 dev 包) - 在错误路径下执行(比如进了子目录或没
composer.json的地方)→ 报错或无输出 - 用了
composer install --no-scripts --no-plugins等极端参数 → 极少数情况导致installed.json写入异常,可删vendor后重试
composer show 默认只显示顶层依赖,怎么查完整依赖树?
加 --tree 参数:它会展开所有已安装包的真实依赖链,缩进表示层级,是定位重复引入、版本冲突或虚拟包(如 psr/log)来源的唯一可靠方式。
-
composer show --tree→ 输出整个项目的依赖树(几百行起,慎用) -
composer show --tree guzzlehttp/guzzle→ 只看某个包及其向下依赖 -
composer show --tree | grep "monolog"→ 过滤关键词,注意保留前导空格,否则缩进丢失 - 不加
--tree时,show不递归,哪怕包实际被多层嵌套引入,也不会出现在默认列表里
查全局安装的包不能用 composer show
composer show 完全无视全局环境,它只认当前项目的 vendor/。查全局包必须用 composer global show。
-
composer global show→ 列出所有全局包(读~/.composer/composer/installed.json或 Windows 的%APPDATA%\Composer\vendor\composer\installed.json) -
composer global show laravel/installer→ 查指定全局包是否存在(大小写敏感,必须写全名) - 查到了但命令不可用?说明
~/.composer/vendor/bin(或对应 Windows 路径)没进PATH,不是global show的问题 - 报
Command "global" not found→ Composer 版本太老,先composer self-update
真正容易被忽略的是:没有 vendor 就一切归零;--tree 是唯一能看清“谁拉了谁”的方式;全局和本地命令绝对不能混用——这三个点卡住的人最多。


















