直接换国内镜像源是最有效的办法,其他优化都是锦上添花;镜像配置必须满足三要素:键名repo.packagist(单数)、type值为composer、url以https://开头且末尾带/,缺一则静默回退官方源。

直接换国内镜像源是最有效的办法,其他优化都是锦上添花。不换源,调再多参数也难突破网络瓶颈。
镜像源配置必须正确,否则等于没配
执行 composer config -g repo.packagist,输出必须是完整 JSON 对象,形如 {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。常见失效点:
-
repo.packagist写成repos.packagist(多一个 s) - 命令漏掉
composer类型参数,比如写成composer config -g repo.packagist https://...,缺了中间的composer就会 fallback 到官方源 - URL 末尾没斜杠:
https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌(会导致请求/packages.json时 404) - 项目级
composer.json里写了"repositories"字段,它优先级高于全局配置,得删掉或同步改成镜像地址
镜像源 + 并行下载 = 实测提速 3–5 倍
parallel-downloads=10 在 Composer 2.2+ 才生效,旧版本设了也白搭。先运行 composer --version 确认版本。默认值是 3,基本等于串行。
- 设为 10 是多数场景的平衡点,但前提是镜像源支持 HTTP/2;否则并发请求会被排队堵死
- 临时切回官方源测试是否真由并发引起:
composer config -g repo.packagist composer https://repo.packagist.org - CI 环境每次构建都是干净环境,必须在 workflow 中提前加
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
DNS 和代理配置容易被忽略
Composer 全链路走 HTTPS,DNS 解析慢、TLS 握手卡顿都会表现为“Loading composer repositories”卡住。
- 把系统 DNS 改成
114.114.114.114或223.5.5.5,能明显加快域名解析 - 用代理必须显式配置,Composer 不读
http_proxy环境变量:composer config -g repo.packagist.org.proxy http://127.0.0.1:7890和composer config -g repo.packagist.org.ssl-proxy http://127.0.0.1:7890 - 代理地址必须带协议和端口,漏掉
http://会报Invalid URI;SOCKS5 需 Composer ≥ 2.2 - 公司内网或 CI 中若已有阿里云/腾讯云镜像,就不该再配代理,二者冲突
--prefer-dist 失效往往不是参数问题
--prefer-dist 不是万能开关,它只在包本身提供 dist 字段时才生效。日志里如果还出现 Cloning https://github.com/...,说明 fallback 到了 source。
- 检查是否启用了
"prefer-source": true(项目级或全局),用composer config --unset prefer-source清除 - 私有 GitLab 包未显式声明
dist,或用了path类型依赖(如"monolog/monolog": {"type": "path", "url": "../monolog"}),必然走 source - 缓存没清,旧元数据还在拉海外源,务必先跑
composer clear-cache
最常被低估的是镜像源是否真正生效,以及是否在 Docker/CI 等隔离环境中重复遗漏配置。一次确认,后续所有命令都受益。











