composer_repo_packagist 是 composer 2.2+ 唯一支持的运行时镜像切换环境变量,必须全大写、末尾带/,仅对非 global 命令生效,优先级最高且会覆盖配置文件。

COMPOSER_REPO_PACKAGIST 是唯一有效的环境变量
Composer 2.2+ 才真正支持运行时镜像切换,COMPOSER_REPO_PACKAGIST 是它唯一识别的变量名——别写成 COMPOSER_REPO_PACKAGIST_URL 或 COMPOSER_MIRROR,那些全无效,且不会报错,只会静默 fallback 到 https://packagist.org。
这个变量优先级最高,启动时直接覆盖项目级和全局配置,不改任何文件,退出终端即失效,适合 CI 调试、临时验证或多人共享服务器上避免污染全局设置。
- Linux/macOS:直接在命令前加前缀,如
COMPOSER_REPO_PACKAGIST=https://mirrors.aliyun.com/composer/ composer install -vvv - Windows CMD:
set COMPOSER_REPO_PACKAGIST=https://mirrors.aliyun.com/composer/ && composer install - PowerShell:
$env:COMPOSER_REPO_PACKAGIST="https://mirrors.aliyun.com/composer/"; composer install
URL 必须以 / 结尾,否则请求 404
少一个斜杠,Composer 就会把 packages.json 拼成 /composerpackages.json,而不是 /packages.json,结果是镜像服务器返回 404,Composer 自动回退到官方源——你完全看不出问题,日志里只显示卡在 Downloading https://packagist.org/p/...。
- ✅ 正确:
https://mirrors.aliyun.com/composer/ - ❌ 错误:
https://mirrors.aliyun.com/composer(缺末尾 /) - ❌ 错误:
https://mirrors.aliyun.com/composer//(多一个 /,部分镜像站拒收)
验证是否生效:加 -vvv 运行命令,滚动日志中找 Downloading https:// 行,域名必须是你设的镜像地址,不是 packagist.org。
它不作用于 composer global 命令
COMPOSER_REPO_PACKAGIST 对 composer global require 或 composer global update 完全无效——这些命令强制读取 ~/.composer/config.json 中的 repo.packagist 配置。
- 想让 global 命令走镜像,必须单独执行:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 注意中间的
composer是 type 参数,不能省略;URL 同样要带末尾/ - Windows 用户改完需重启终端,否则
composer config -g repo.packagist查不到新值
也就是说,COMPOSER_REPO_PACKAGIST=https://xxx/ composer global require laravel/installer 这种写法,镜像根本不起作用,仍会连 packagist.org。
CI/容器中注入环境变量必须早于 composer 进程启动
在 GitHub Actions、GitLab CI 或 Docker 构建中,如果用 run 或 shell 分步设置变量,但没确保它在 composer install 所在进程的环境里,就会失效。
- GitHub Actions:用
env:块注入,不要用run: export COMPOSER_REPO_PACKAGIST=... - Docker:用
docker run -e COMPOSER_REPO_PACKAGIST=https://mirrors.aliyun.com/composer/ ...,或在Dockerfile的ENV指令中提前声明 - 宝塔计划任务:在脚本开头加
export COMPOSER_REPO_PACKAGIST=...,并确认执行用户(如www)能读取该变量
最容易被忽略的是:变量名大小写敏感,全大写,漏一个字母(比如 COMPOSER_REPO_PACKAGIST_)就彻底失效,而 Composer 不会提示。











