正确命令是composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,必须严格满足三要素:键名repo.packagist(单数、无s)、type值显式写composer、url以https开头且末尾带/,缺一则静默失效。

直接用 composer config -g repo.packagist 命令就能切,但必须带 composer 类型声明、URL 末尾带 /、键名是单数 repo.packagist —— 错一个就静默失效,不报错也不走镜像。
为什么 composer config -g repo.packagist 没生效?
这不是网络问题,八成是命令写错或被覆盖:
-
repos.packagist(多了一个s)—— Composer 完全忽略,配置写进去了也查不到 - 漏掉中间的
composer参数,比如写成composer config -g repo.packagist https://mirrors.aliyun.com/composer/—— 会 fallback 到官方源 - URL 少了末尾
/,例如https://mirrors.aliyun.com/composer—— 请求路径拼成/composerpackages.json,直接 404 - 项目根目录
composer.json里有"repositories"字段(哪怕空对象)—— 优先级高于全局,repo.packagist配置完全不生效 - 没清缓存,
composer clear-cache没执行 —— Composer 继续用旧元数据发请求
阿里云、腾讯云、华为云镜像怎么配才对?
三个主流源地址和命令都严格固定,不能自由发挥:
- 阿里云:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 腾讯云:
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/ - 华为云:
composer config -g repo.packagist composer https://repo.huaweicloud.com/repository/php/
注意:https://mirrors.huaweicloud.com/repository/php/ 已 404,必须用 repo.huaweicloud.com;所有 URL 必须以 https:// 开头、结尾带 /,否则 Invalid repository type。
composer global require 还是连 packagist.org?
因为全局命令读的是 ~/.composer/composer.json 的仓库配置,和 ~/.composer/config.json(config -g 写入的位置)是两套配置。现象是:你明明全局设了镜像,composer global require larastan/larastan 却卡在下载 packages.json。
解决方法:
- 进
~/.composer目录,运行composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加-g) - 验证:
composer global show -s输出里要有你配的镜像域名 - 别依赖
COMPOSER_REPO_PACKAGIST环境变量 —— 新版 Composer 基本不识别它
临时切源、项目级切源、恢复默认怎么操作?
场景不同,命令差异明显:
- 临时只对当前命令生效(比如调试 CI):
composer install -r https://mirrors.aliyun.com/composer/—— 注意这个-r不写入任何配置,下次命令就失效 - 只改当前项目(推荐团队协作时用):
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(去掉-g),会自动在composer.json里加"repositories": {"packagist": {...}} - 恢复官方源:
composer config -g --unset repos.packagist—— 注意是repos.packagist(带s),这是 unset 的 key 名,和 set 时的repo.packagist不一致 - 删项目级配置:
composer config --unset repositories(不加-g),比手动编辑composer.json安全,避免格式错乱
真正容易被忽略的是 composer.lock 文件:它硬编码了包下载地址,旧 lock 会绕过新镜像。换源后务必删掉 vendor/ 和 composer.lock,再 composer install 才算真正走新源。











