composer global show 可直接列出所有已安装的全局包及版本号和描述,不依赖当前目录;加 --direct 仅显示手动安装的包,加 --name-only 仅显示包名,--format=table 或 --name --version 可输出简洁的包名+版本信息。

直接查全局包列表:用 composer global show
想一眼看清你全局装了哪些工具(比如 laravel/installer、phpunit/phpunit、php-cs-fixer),最直接的命令就是:composer global show。它会列出所有已安装的全局包,包括版本号和简短描述。
注意:这个命令不依赖当前目录位置——哪怕你在 /tmp 下运行也有效,因为它读的是全局配置,不是项目里的 composer.json。
- 如果只关心自己手动装的(排除自动拉进来的依赖),加
--direct:composer global show --direct - 想快速确认某个包是否在全局装了,直接指定名字:
composer global show laravel/installer - 输出太长看不过来?加
--name-only只显示包名:composer global show --name-only
确认全局包到底存在哪:查路径比猜靠谱
有时候 composer global show 显示包已安装,但终端却找不到命令(比如敲 php-cs-fixer 报 “command not found”),大概率是 vendor/bin 没进 PATH,或者你压根没装对地方。
先用这条命令定位真实路径:composer config --global home。它会输出类似 /home/yourname/.composer(Linux/macOS)或 C:\Users\YourName\AppData\Roaming\Composer(Windows)的路径——所有全局包都放在这个目录下的 vendor/ 里。
- 全局 bin 目录是
[home]/vendor/bin,不是[home]/bin,别找错 - 确保该
bin目录已加入系统PATH,否则命令无法全局调用 - Windows 用户注意:
%APPDATA%\Composer\Vendor\bin是实际路径,环境变量里要填对
只看版本号?用 --format=table 或 --name --version
CI 脚本或快速审计时,不需要描述、不需要依赖树,只要干净的「包名 + 版本」两列数据。
composer global show --format=table 输出整齐表格,默认就包含这两列;更轻量的写法是:composer global show --name --version,每行一个包,空格分隔,方便管道处理(比如 | grep "phpunit")。
-
--format=json适合脚本解析,但要注意:全局插件需额外检查"type": "composer-plugin" - 别用
composer show(无global)查全局包——它只会扫当前项目,结果为空也不奇怪 -
--installed对全局命令意义不大,因为global show默认就只显示已安装的
常见误操作:把项目命令当全局用,或反过来
最常踩的坑是混淆作用域:composer show 和 composer global show 查的根本不是同一套东西,不能互相替代。
例如你在项目里运行 composer require phpunit/phpunit,它只会出现在 composer show 结果里;而用 composer global require phpunit/phpunit,才进 global show 列表。两者文件路径、加载机制、调用方式全都不一样。
- 全局包不能被项目代码
require,它们不在项目vendor/下,autoloader 也扫不到 - 项目中
composer update不会影响全局包,反之亦然 - 删错包?
composer global remove vendor/package才是正解,别去手动删~/.composer/vendor目录
路径、作用域、PATH 配置——这三个点漏掉任何一个,global show 就可能“显示有,但用不了”。










