Composer无全局变量概念,需配置COMPOSER_HOME和PATH:前者控制配置缓存位置,后者决定命令能否运行;查路径用composer config --list --global | grep home、composer global config bin-dir及echo $COMPOSER_HOME。

Composer 没有“全局变量”这个概念——你真正要配的是 COMPOSER_HOME 和系统 PATH,它们分别控制配置/缓存位置和命令能否直接运行。
怎么查当前 Composer 全局路径?
别猜,用命令确认:
-
composer config --list --global | grep home—— 显示home配置项,即COMPOSER_HOME实际值 -
composer global config bin-dir—— 显示可执行文件所在目录(比如~/.composer/vendor/bin),这才是你要加进PATH的路径 -
echo $COMPOSER_HOME(Linux/macOS)或echo %COMPOSER_HOME%(Windows)—— 看环境变量是否已生效
注意:如果 composer config --list --global 里没显示 home,说明你没手动设过,Composer 正在用默认路径(~/.composer 或 %APPDATA%\Composer)。
Linux/macOS:PATH 和 COMPOSER_HOME 怎么加?
两件事必须都做,缺一不可:
- 把全局
bin目录加进PATH:
在~/.zshrc(macOS Catalina+ 默认)或~/.bashrc末尾加:export PATH="$HOME/.composer/vendor/bin:$PATH"
改完后source ~/.zshrc,否则新开终端才生效 - 如需自定义
COMPOSER_HOME(比如想把缓存挪到 SSD):
同一配置文件中加:export COMPOSER_HOME="$HOME/.my-composer"
然后重新运行composer global require—— 旧路径下的包不会自动迁移,得重装
⚠️ 常见坑:$HOME/.composer/vendor/bin 里看到的 laravel 很可能是软链接,若 file $(composer global config bin-dir)/laravel 报 “broken symlink”,删掉它再 composer global update 即可修复。
Windows:PATH 设置最容易出错的地方
不是加不加的问题,是加对没加对:
- 必须用「系统属性 → 高级 → 环境变量」图形界面添加,不要只改注册表或 CMD 临时 set
- 用户变量里加:
%APPDATA%\Composer\vendor\bin(这是默认路径;如果你改过COMPOSER_HOME,就得填对应的新vendor\bin路径) - 加完务必重启所有终端(包括 VS Code 的集成终端、Git Bash、PowerShell),否则
where laravel仍找不到 - 路径里不能有中文或空格——哪怕路径本身合法,某些旧版 Composer 或 PHP CLI 会截断解析,导致命令静默失败
验证方式:echo %PATH% 输出里要有那一行,且 where laravel 能返回路径,laravel --version 能正常输出才算真正成功。
为什么改了 COMPOSER_HOME 还是找不到命令?
因为 PATH 没同步更新——这是最常被忽略的连锁反应:
-
COMPOSER_HOME改成/opt/composer→ 全局bin就变成/opt/composer/vendor/bin - 但你的
PATH还指着~/.composer/vendor/bin,自然找不到 - 同样,
auth.json和config.json也不会自动从旧路径搬过来,私有仓库登录、镜像源等配置全失效 - 首次用新
COMPOSER_HOME时,Composer 只会新建空目录,不会复制旧数据
所以每次动 COMPOSER_HOME,都要检查三处:PATH、auth.json 是否手动迁移、全局包是否重装。不是改一个环境变量就完事了。











