composer show -i 显示当前项目 vendor/ 目录中实际已安装的依赖包,仅反映真实安装状态,不包含未安装的声明依赖或 lock 文件中未执行 install 的包。

composer show -i 显示的是什么
composer show -i 是 Composer 提供的快捷命令,等价于 composer show --installed,作用是列出当前项目中所有已安装的依赖包(即 vendor/ 下实际存在的包),不包含 require-dev 中未启用的开发依赖(除非你运行时加了 --dev)。
它不会显示 packagist.org 上可选但尚未安装的包,也不会显示 lock 文件里记录但没执行 install 的包——只反映真实安装状态。
常见误用:为什么有时输出为空或报错
执行 composer show -i 前必须确保:
-
composer.json存在且格式合法(哪怕空 require 也行) -
vendor/autoload.php可被识别,即vendor/目录至少存在(哪怕为空);若整个vendor/被删了,会提示Could not find package或直接无输出 - 没有在错误目录下执行(比如进了
vendor/some/package再跑,Composer 会找不到项目根)
如果刚初始化项目但还没 composer install,composer show -i 就不会显示任何包——它不读 composer.json 的声明,只查 vendor/ 实际内容。
查看带版本号和来源的完整列表
默认输出是简略格式(包名 + 版本),加 -s(--source)能显示包来源(如 git URL 或 dist zip 地址),对排查私有源或 fork 包很有用:
composer show -i -s
想快速筛选某个包?直接追加包名:
composer show -i monolog/monolog
这会精确匹配已安装的 monolog/monolog,并显示其依赖树(如果装了)、版本、License 和 source 信息。注意:这里写的包名必须和 vendor/ 里的目录名完全一致(区分大小写,含 vendor name)。
替代方案:比 show -i 更轻量的检查方式
如果只是确认有没有装某个包,或者 CI/脚本里做判断,没必要调用 show(它会加载整个 autoloader 和依赖图):
- 检查目录是否存在:
test -d vendor/monolog/monolog - 看 lock 文件里是否记录:
grep -q '\"monolog/monolog\"' composer.lock - 用
composer show -i | grep monolog最快,但依赖终端支持管道
真正容易被忽略的是:当项目用了 platform-check 或 config.platform 模拟 PHP 扩展时,show -i 不会提示这些“虚拟安装”的扩展——它只展示真正存在于 vendor/ 的包。










