必须严格执行composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,缺一不可:-g(全局)、repo.packagist(单数键名)、composer(type值)、url以https://开头且末尾带/,否则静默回退packagist.org。

直接用 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 就能生效,但 90% 的人卡在这一步——不是网络慢,是命令漏了关键字段或 URL 少了斜杠,导致静默回退官方源。
为什么 composer config -g repo.packagist 总不生效
这条命令不报错,但 composer install 还卡在 Loading composer repositories,大概率是以下任一条件没满足:
-
repo.packagist键名不能多写s(repos.packagist是无效键) - 第二个参数必须显式写
composer(它是type值,不是可选注释) - URL 必须以
https://开头,且末尾带/(https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌) - 漏掉
-g参数 → 只改当前项目,换目录就失效
验证是否真写入:运行 composer config -g repo.packagist,输出必须是完整 JSON 对象,形如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。空、null 或报错,说明没配成功。
阿里云/腾讯云/华为云镜像地址怎么填才对
不同镜像路径结构差异大,不能套模板,尤其华为云需额外路径层级:
- 阿里云:
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://mirrors.huaweicloud.com/repository/php/composer/
清华旧镜像 https://packagist.phpcomposer.com 已下线;中科大镜像 https://packagist.mirrors.ustc.edu.cn/ 同步延迟略高,日常开发优先选阿里云或腾讯云。
换源后还是卡在 Downloading packagist.org 怎么办
现象是日志里仍出现 packagist.org,说明镜像根本没走通,常见原因:
- 没清缓存:
composer clear-cache必须执行,否则本地缓存仍指向旧地址 - 项目级配置覆盖全局:
composer.json里有"repositories"字段时,它优先级更高,会静默忽略全局设置 - 没删旧文件:
vendor/和composer.lock保留了旧元数据,需一并删除再composer install --no-cache -vvv - CI 或 Web 服务用的是其他用户(如
www-data),而-g配的是root,得切换用户重配:sudo -u www-data composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
项目级配置比全局更可靠,怎么安全追加
团队协作或 CI 环境中,全局配置容易因用户权限、缓存、覆盖等问题失效,项目级配置可 Git 跟踪、行为一致:
- 进项目根目录,运行:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加-g) - 该命令会自动写入
composer.json的"repositories"字段,key 固定为"packagist" - 已有
"repositories"数组?别手动编辑——用命令追加,避免误删私有源 - 注意:
"packagist": false会禁用官方源,若没补全镜像 URL,基础包将无法安装
真正生效的临界点不在命令执行那一刻,而在你用实际运行用户(比如 www-data)跑一次 composer show monolog/monolog 并看到秒出结果——之前所有验证都只是纸面确认。











