composer config -g repo.packagist 总不生效是因为必须同时满足三个硬性条件:键名严格为单数 repo.packagist、中间参数必须显式写 composer(type 值)、url 必须 https 且末尾带 /;任一错误即静默回退官方源,验证需输出完整 json 如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。

镜像源同步超时,90% 是本地配置没生效或缓存没清干净,不是镜像站慢——配错 repo.packagist、漏掉末尾 /、不调 http.timeout,就等于白配。
为什么 composer config -g repo.packagist 总是不生效
这条命令静默失败率极高,不报错但实际没写进全局配置。必须同时满足三件事:
-
repo.packagist是单数,写成repos.packagist或repositories.packagist.org都无效 - 命令中间的
composer是 type 值,不能省略,也不能替换成 URL 或注释 - URL 必须以
https://开头,且末尾带/:例如https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(会请求/composer/packages.json导致 404)
验证是否真生效:运行 composer config -g repo.packagist,输出必须是完整 JSON 对象,比如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"};空、null 或仍含 packagist.org 就说明失败。
http.timeout 和 process-timeout 必须一起调,且值要够大
这两个参数管的是不同阶段,混设等于白调:
-
http.timeout控制每次 HTTP 请求的总耗时(DNS + TLS 握手 + 首字节 + body 下载),默认仅 60 秒。国内镜像的packages.json已超 10MB,首字节延迟高时最先触发失败,建议设为600(10 分钟) -
process-timeout控制整个composer install命令从启动到退出的总耗时上限,默认 300 秒。它包含解压、生成 autoload、运行 post-install-cmd 等步骤,大项目推荐设为1200(20 分钟) - 别碰
http-basic.timeout——Composer v2+ 完全不读这个;也别信--timeout=600,它只限制命令总耗时,对 HTTP 下载阶段无效
执行命令:composer config -g http.timeout 600 和 composer config -g process-timeout 1200。
元数据缓存不刷新,换再快的镜像也没用
Composer 默认复用 15 分钟内未过期的 packages.json 和 provider-*.json,哪怕镜像站已更新,你本地还是按旧索引算——所以 composer clear-cache 根本不管用。
- Composer ≥ 2.5:直接跑
composer update --refresh,它只丢弃元数据缓存,不删已下载 ZIP 包,快且精准 - 老版本 Composer:手动删缓存里的元数据目录,路径形如
$(composer config --global cache-dir)/repo/https---mirrors-aliyun-com-composer - 验证是否真走新源:加日志观察真实请求地址,
composer show monolog/monolog -vvv 2>&1 | grep "Downloading",输出中必须出现镜像域名(如mirrors.aliyun.com),而不是packagist.org
项目根目录若存在 composer.json 且含 repositories 字段,它会完全屏蔽全局配置——此时得查 composer config repo.packagist(不带 -g)。
系统时间偏差也会导致“超时”假象
SSL 证书校验失败常被误判为网络超时。系统时间比真实时间快或慢超过 2 分钟,就会触发 SSL certificate problem: certificate has expired 或 cURL error 60。
- Linux/macOS:运行
sudo timedatectl set-ntp true并重启systemd-timesyncd - Windows:管理员权限下执行
w32tm /resync,若失败先运行net start w32time - 临时调试可用
COMPOSER_DISABLE_TLS=1,但不安全,仅限排查
真正卡住你的,往往不是镜像站同步慢,而是本地缓存没清、配置写错一个字符、或系统时间漂移了几分钟——这些点漏掉任何一个,composer install 就会卡在 “Loading composer repositories” 或 “Downloading” 不动。











