优先使用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 目录(如
),而 PATH
环境变量
只能优先使用其中一个。
理解冲突来源
Composer 全局安装的工具默认放在
,每次运行
都会更新依赖,可能导致版本升级或降级。而 cgr(clean global require)的作用是临时清除已安装包再安装新版本,避免全局依赖“污染”,但它仍把可执行文件放到同一目录。
问题出现在:如果同一个工具(如
laravel
/installer、
php
unit/phpunit)被两种方式反复安装,最终生效的只会是最后写入的那个版本,容易导致不可预测的行为。
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
确保 PATH 只指向一个统一的 bin 目录
检查你的 shell配置文件(如 ~/.bashrc、~/.zshrc)中是否正确设置了 PATH:
确认只包含一个 Composer 全局 bin 路径:
不要重复添加,也不要加入其他可能冲突的路径
保存后运行
或重启终端使更改生效
统一使用 cgr 替代
composer
global
推荐完全弃用,转而使用 cgr 统一管理:
安装 cgr:
之后所有全局工具都用
安装
例如:
这样能避免依赖锁定和版本干扰
清理现有冲突状态
如果你已经混用过两种方式,建议重置全局 vendor 目录:
删除全局 vendor 文件夹:
删除 composer.lock 文件:
重新使用 cgr 安装所需工具
基本上就这些。关键是选择一种管理方式并坚持使用,避免混用
和
。cgr 更安全,适合长期维护全局工具。
~/.composer/vendor/bin~/.composer/vendor/bincomposer global requireexport PATH="$HOME/.composer/vendor/bin:$PATH"source ~/.bashrccomposer global requirecomposer global require consolidation/cgrcgr require package/namecgr require laravel/installerrm -rf ~/.composer/vendorrm ~/.composer/composer.lockcomposer globalcgr