优先使用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)被两种方式反复安装,最终生效的只会是最后写入的那个版本,容易导致不可预测的行为。
export PATH="$HOME/.composer/vendor/bin:$PATH"
source ~/.bashrc 或重启终端使更改生效composer global require,转而使用 cgr 统一管理:
composer global require consolidation/cgr
cgr require package/name 安装cgr require laravel/installer
如果你已经混用过两种方式,建议重置全局 vendor 目录:
rm -rf ~/.composer/vendor
rm ~/.composer/composer.lock
基本上就这些。关键是选择一种管理方式并坚持使用,避免混用 composer global 和 cgr。cgr 更安全,适合长期维护全局工具。