如何使用cgr(Composer Global Require)来隔离全局工具?

10次阅读

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

如何使用cgr(Composer Global Require)来隔离全局工具?

使用 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 工具场景。

text=ZqhQzanResources