系统环境变量对 composer 镜像源配置完全无效,composer 只认 config 文件中的 repo.packagist 字段;唯一可靠方式是 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,且必须满足三条件:带-g、键名单数、url 末尾带/,验证输出须为完整 json。

直接说结论:系统环境变量对 Composer 镜像源配置完全无效。 Composer 不读 HTTP_PROXY、HTTPS_PROXY,也不认 COMPOSER_REPO_PACKAGIST(除非你用的是极老版本或自定义 fork),它只认自己配置文件里的 repo.packagist 字段。靠改环境变量来“加速下载”是常见误解,徒劳无功。
为什么 COMPOSER_REPO_PACKAGIST 环境变量不生效
这个变量名听起来合理,但 Composer 官方从未实现对其的支持——至少从 2.0 到当前最新版(2.8.x)均未识别。你设了 COMPOSER_REPO_PACKAGIST=https://mirrors.aliyun.com/composer/,再跑 composer install,日志里照样出现 Downloading https://packagist.org/p/...。
- Composer 的源解析逻辑硬编码在
RepositoryManager类中,只加载三处:环境变量(仅限COMPOSER_HOME、COMPOSER_CACHE_DIR等路径类)、项目级composer.json的repositories字段、全局config.json的repo.packagist -
COMPOSER_REPO_PACKAGIST不在白名单里,设了等于没设,连警告都不会输出 - 部分第三方教程或旧脚本误传该变量,实测在 Windows / Linux / macOS 全平台静默忽略
composer config -g repo.packagist 才是唯一可靠方式
真正起效的只有这条命令,但它有三个不可妥协的硬性条件,缺一即静默失败:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须带
-g参数,否则只写进当前项目的composer.json,换目录就失效 - 键名必须是单数
repo.packagist,写成repos.packagist或repositories.packagist会被忽略 - 中间的
composer是 type 值,不是注释——漏掉会导致写入纯字符串而非 JSON 对象,composer config -g repo.packagist输出会是"https://..."而非{"type": "composer", "url": "..."} - URL 必须以
https://开头,且末尾必须带/:例如https://mirrors.aliyun.com/composer/✅,少斜杠就会请求/composerpackages.json(404)而 fallback 回官方源
正确执行后,验证命令输出必须是完整 JSON:
composer config -g repo.packagist<br>{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}
项目级配置比环境变量更稳,也比全局配置更可靠
全局配置写在 %APPDATA%\Composer\config.json(Windows)或 ~/.composer/config.json(Linux/macOS),但它只对“当前用户 + 当前权限上下文”有效。CI 流水线、宝塔后台、Docker 容器、计划任务常以 www 或 runner 用户运行,根本读不到你的配置。
- 推荐做法:进项目根目录,运行
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(注意没有-g) - 该命令会安全追加到
composer.json的repositories字段,Git 可提交,所有环境行为一致 - 若项目已有
"repositories": [](数组),需先手动改为"repositories": {}(空对象)再执行,否则报错 - 切忌手写
"packagist.org": false—— 这会彻底关掉回退机制,镜像临时挂了就整个安装失败
最容易被忽略的一点:换源后不清缓存,等于没换。旧缓存里的 packages.json 仍指向 packagist.org,Composer 会继续用它拉 provider 列表。必须执行 composer clear-cache,再加 -vvv 跑一次 composer install,确认日志中出现 Downloading https://mirrors.aliyun.com/composer/dists/ 才算真正生效。










