COMPOSER_HOME被错误覆盖会导致全局配置、缓存及vendor/bin命令全部失效;需先检查并清除该环境变量,再确认config.json中无残留错误home路径,最后确保bin-dir已正确加入系统PATH。

COMPOSER_HOME 被错误覆盖后,Composer 会完全忽略默认路径,导致全局配置、缓存、vendor/bin 命令全部失效——这不是“配置没生效”,而是路径指向了空目录或权限错误的位置。
确认 COMPOSER_HOME 是否被篡改
运行 composer config --list --global,看顶部 “Global configuration file” 路径是否符合预期:
– Linux/macOS 默认应为 ~/.config/composer/config.json(Composer ≥2.2)或 ~/.composer/config.json(旧版)
– Windows 默认应为 %APPDATA%\Composer\config.json
若路径异常(如含 ~、$HOME、中文、相对路径),说明 COMPOSER_HOME 被设错
清除环境变量并重置为默认值
别只删变量,要让它彻底“不存在”:
– Linux/macOS:unset COMPOSER_HOME,再检查 echo $COMPOSER_HOME 应无输出
– Windows CMD:set COMPOSER_HOME=(注意等号后为空)
– Windows PowerShell:Remove-Item Env:\COMPOSER_HOME
然后必须关闭所有终端窗口,新开一个再验证
⚠️ 即使你用 composer config --global home 改过路径,只要 COMPOSER_HOME 环境变量存在,它就永远优先于配置项
检查 config.json 是否残留错误路径
即使环境变量清空,~/.config/composer/config.json(或对应路径)里可能还存着手动写的 "home" 字段:
– 打开该文件,搜索 "home" 或 "COMPOSER_HOME"
– 若发现类似 "home": "/wrong/path" 的条目,直接删掉整行或整个 home 键
– 保存后运行 composer config --global home,应返回默认路径,而非你填的值
验证 vendor/bin 命令是否回归正常
全局命令(如 laravel、phpunit)找不到,90% 是因为 COMPOSER_HOME\vendor\bin 没加进系统 PATH:
– 先查真实路径:composer config --global bin-dir --absolute
– Windows:把输出路径加进「用户变量」→ Path(不是系统变量)
– Linux/macOS:在 ~/.zshrc 或 ~/.bashrc 末尾加 export PATH="$(composer config --global bin-dir --absolute):$PATH",再 source
– 最后新开终端,运行 which laravel(macOS/Linux)或 where laravel(Windows)确认可执行文件位置


















