优先使用cgr管理全局工具以避免版本冲突。Composer和cgr均将可执行文件安装至~/.composer/vendor/bin,混用会导致命令覆盖。应统一配置PATH为export PATH="$HOME/.composer/vendor/bin:$PATH"并仅通过cgr安装,如cgr require laravel/installer,确保依赖纯净。已混用时需删除~/.composer/vendor及composer.lock后重建。

当使用 Composer 和 cgr 安装全局工具时,可能会出现版本冲突或命令覆盖的问题。这是因为两者都可能将可执行文件安装到相同的全局 bin 目录(如 ~/.composer/vendor/bin),而 PATH 环境变量只能优先使用其中一个。
理解冲突来源
Composer 全局安装的工具默认放在 ~/.composer/vendor/bin,每次运行 composer global require 都会更新依赖,可能导致版本升级或降级。而 cgr(clean global require)的作用是临时清除已安装包再安装新版本,避免全局依赖“污染”,但它仍把可执行文件放到同一目录。
问题出现在:如果同一个工具(如 laravel/installer、phpunit/phpunit)被两种方式反复安装,最终生效的只会是最后写入的那个版本,容易导致不可预测的行为。
确保 PATH 只指向一个统一的 bin 目录
检查你的 shell 配置文件(如 ~/.bashrc、~/.zshrc)中是否正确设置了 PATH:- 确认只包含一个 Composer 全局 bin 路径:
export PATH="$HOME/.composer/vendor/bin:$PATH" - 不要重复添加,也不要加入其他可能冲突的路径
- 保存后运行
source ~/.bashrc或重启终端使更改生效
统一使用 cgr 替代 composer global
推荐完全弃用composer global require,转而使用 cgr 统一管理:
- 安装 cgr:
composer global require consolidation/cgr - 之后所有全局工具都用
cgr require package/name安装 - 例如:
cgr require laravel/installer - 这样能避免依赖锁定和版本干扰
清理现有冲突状态
如果你已经混用过两种方式,建议重置全局 vendor 目录:
- 删除全局 vendor 文件夹:
rm -rf ~/.composer/vendor - 删除 composer.lock 文件:
rm ~/.composer/composer.lock - 重新使用 cgr 安装所需工具
基本上就这些。关键是选择一种管理方式并坚持使用,避免混用 composer global 和 cgr。cgr 更安全,适合长期维护全局工具。










