Composer只认COMPOSER_HOME、COMPOSER_CACHE_DIR、COMPOSER_REPO_PACKAGIST等少数系统级变量:COMPOSER_HOME必须为绝对路径,含~或中文则静默退至默认目录;PATH须包含$COMPOSER_HOME/vendor/bin才能调用laravel等全局命令;COMPOSER_REPO_PACKAGIST镜像URL末尾必须带斜杠,否则404;所有变量配置后均需新开终端验证,且COMPOSER_HOME变更后需手动迁移auth.json并重装全局包。

Composer 本身不依赖你配置应用级环境变量(比如 APP_ENV 或 DB_HOST),它只认少数几个系统级变量——设错一个,global 命令就静默失效、缓存全丢、镜像不走,连 laravel 命令都找不到。
COMPOSER_HOME 必须是绝对路径,否则 global install 的命令全进错目录
这个变量决定全局配置、auth、缓存和 vendor/bin 的根位置。只要含 ~、$HOME、%USERPROFILE% 或中文字符,Composer 就自动退回到默认路径(~/.composer 或 %APPDATA%\Composer),你装的 laravel、phpunit 全在另一个地方。
- Linux/macOS 正确写法:
export COMPOSER_HOME="/home/yourname/.my-composer"(不能用~/my-composer) - Windows 正确写法:
setx COMPOSER_HOME "C:\Users\YourName\AppData\Roaming\Composer"(引号内不能有空格,也不能用C:\用户\) - 设完必须新开终端——
source ~/.zshrc不管用,子进程不继承父 shell 的环境变量 - 验证方式:
composer config --list --global,看 “Global configuration file” 行是否匹配你设的路径
PATH 必须包含 $COMPOSER_HOME/vendor/bin,否则全局命令找不到
Composer 从不自动把全局 bin 目录加进 PATH。它只负责把 laravel、phpunit 这类文件放进 $COMPOSER_HOME/vendor/bin,剩下的全靠你自己配。
- Linux/macOS:在
~/.zshrc末尾加export PATH="$COMPOSER_HOME/vendor/bin:$PATH"(顺序很重要,放前面防系统同名命令覆盖) - Windows:把
%COMPOSER_HOME%\vendor\bin加进「用户变量 → Path」(不是%APPDATA%\Composer\vendor\bin,除非你根本没设COMPOSER_HOME) - 加完必须新开终端,再运行
echo $PATH(macOS/Linux)或echo %PATH%(Windows)确认路径存在 - 最后用
which laravel(macOS/Linux)或where think(Windows)确认指向的是vendor/bin下的文件
COMPOSER_REPO_PACKAGIST 镜像地址必须带尾部斜杠,否则 404
这是唯一真正生效的镜像环境变量,优先级高于 composer.json 和 config.json 里的 repositories 配置。但 URL 写错一个字符,就会拼出非法路径。
- 正确写法:
export COMPOSER_REPO_PACKAGIST=https://mirrors.aliyun.com/composer/(注意结尾/) - 错误写法:
https://mirrors.aliyun.com/composer(少斜杠 → 请求变成.../composerpackages.json→ 404) - 验证是否生效:
composer config -g repo.packagist,输出应为{"url": "https://mirrors.aliyun.com/composer/"} - CI 场景(如 GitHub Actions)需在
env:块中显式声明,不能只靠 shellexport
COMPOSER_CACHE_DIR 设错会导致每次 update 都重下包
这个变量控制下载包、解压、installer 缓存的位置。它不只影响首次安装速度,更关键的是决定 composer update 能否跳过重复下载——设错就等于每次都从零开始。
- 可独立于
COMPOSER_HOME设置,例如 SSD 分区加速:export COMPOSER_CACHE_DIR="/mnt/ssd/composer-cache" - 如果设为不可写路径,会出现
Failed to create cache directory: Permission denied,此时 Composer 会退回到内存缓存(极慢)或跳过缓存 - Docker 构建中常见错误:把
COMPOSER_CACHE_DIR指向/tmp/composer-cache,而该路径在容器重启后丢失,缓存失效
最容易被忽略的是:所有这些变量设完都必须新开终端验证,旧终端进程不会读新值;而且 COMPOSER_HOME 改了之后,旧的 auth.json、config.json 和全局包不会自动迁移,得手动拷过去再重装一次 composer global install。


















