cgr 通过为每个全局工具创建独立目录和 autoload 实现轻量隔离,避免 composer global require 的依赖冲突;需将 ~/.cgr/bin 加入 PATH,并手动管理安装、卸载与升级。

使用 cgr(Composer Global Require)并不能真正“隔离”全局工具,它只是让全局安装的 Composer 包更轻量、更可控——本质上仍是全局安装,但避免了污染主 Composer 全局 vendor 目录和 autoload,从而减少冲突风险。
为什么需要 cgr?
直接用 composer global require 会把所有包装进 ~/.composer/vendor/,共享同一个 autoloader。一旦多个工具依赖不同版本的同一库(比如 Symfony components),就容易报错或行为异常。cgr 每次安装都新建独立目录 + 独立 autoload,互不干扰。
安装与基本用法
先全局安装 cgr 本身(只需一次):
composer global require consolidation/cgr
之后用 cgr 替代 composer global require:
cgr drush/drush cgr phpstan/phpstan cgr laravel/installer
每个命令会在 ~/.cgr/ 下创建独立子目录(如 drush-drush),并生成专用的 bin 脚本。
确保命令可用
cgr 安装的二进制文件默认放在 ~/.cgr/bin/,需将该路径加入系统 $PATH(通常在 ~/.bashrc 或 ~/.zshrc 中添加):
export PATH="$HOME/.cgr/bin:$PATH"
然后重载 shell 配置:source ~/.zshrc(或对应配置文件)。
管理已安装的工具
cgr 不提供内置的 list/uninstall 命令,但操作很直观:
- 查看已装工具:
ls ~/.cgr/(每个目录名即包名缩写) - 卸载某个工具:
rm -rf ~/.cgr/{vendor}-{package},再删对应 bin 文件(如rm ~/.cgr/bin/drush) - 升级:直接重新运行
cgr vendor/package,会覆盖旧版本
注意:cgr 不处理依赖自动更新,也不做版本锁,适合对稳定性要求不高、追求简洁的 CLI 工具场景。










