composer global show是查看全局包的唯一正确命令,它不依赖当前目录,直接读取全局配置路径下的installed.json;而composer show仅扫描当前项目vendor目录,完全无法查到全局包。

查全局包不能用 composer show,必须用 composer global show——它不依赖当前目录,也不读项目里的 composer.json 或 vendor/,直接读取全局配置路径下的安装记录。
为什么 composer show 查不到全局包
很多人在项目里执行 composer show laravel/installer,结果报 Package not found,不是包没装,是命令根本没查对地方。composer show 只扫当前项目的 vendor/composer/installed.json,而全局包装在 ~/.composer/vendor/(Linux/macOS)或 %APPDATA%\Composer\Vendor\(Windows)里,完全隔离。
常见错误现象:
- 终端提示
Command "laravel" not found,但composer show laravel/installer也查不到——说明你可能装了全局包,但没加进PATH,或者误用了项目命令 - 在
/tmp目录下运行composer show,输出为空——因为没找到项目composer.json,它不会自动 fallback 到全局
composer global show 的实用参数组合
默认输出带描述、版本、缩进依赖树,但日常真正需要的往往是干净、可筛选、可脚本处理的结果:
- 只看包名列表:
composer global show --name-only,适合快速扫一眼装了哪些工具 - 只看「包名 + 版本」两列:
composer global show --name --version,空格分隔,方便| grep phpunit或写入 CI 脚本 - 导出表格格式:
composer global show --format=table,对齐清晰,适合人工核对 - 确认某个包是否真装了:
composer global show php-cs-fixer,输全名,大小写敏感
查到包名后,怎么确认命令能用
显示已安装 ≠ 终端能直接调用。最常卡在这一步:
- 先定位全局 bin 目录:
composer config --global home,它返回的是全局 Composer 根路径,真实可执行文件在[home]/vendor/bin/下 - 检查该路径是否在
PATH中:echo $PATH(Linux/macOS)或echo %PATH%(Windows) - Windows 用户特别注意:
%APPDATA%\Composer\Vendor\bin是完整路径,环境变量里必须填对,不能少\Vendor\bin - 如果 PATH 没问题但命令仍找不到,试试
ls [home]/vendor/bin/(Linux/macOS)或dir %APPDATA%\Composer\Vendor\bin(Windows),看对应可执行文件是否存在
容易被忽略的关键点
composer global show 不校验实际文件是否存在,只读 installed.json。如果你手动删过 ~/.composer/vendor/ 下的某个包但没清理 installed.json,它仍会显示“已安装”。真要验证,得去 [home]/vendor/ 下 ls 或 dir 看目录是否还在。另外,--direct 参数只过滤掉自动拉进来的依赖,不影响包本身是否可用——它只是告诉你这个包是不是你亲手 composer global require 过的。











