composer卡在downloading或报429是因镜像qps限流,须同步降并发至2(composer config -g repos.packagist.org.concurrent-downloads 2)、配至少3个带"canonical": false的国内镜像、清缓存并验证url结尾含/;ci/cd中还需启用--no-dev、--no-scripts、--no-autoloader。

Composer 卡在 Downloading 或反复报 429 Too Many Requests,不是网络慢、不是机器差,而是镜像源对单 IP 的 QPS 限流触发了——必须降并发 + 配多镜像 + 清元数据缓存,三者缺一不可。
为什么 composer install 会卡在 Downloading 阶段
Composer 解析依赖是串行的,但下载阶段默认开 5–10 个并发连接。国内主流镜像(阿里云、腾讯云、清华)普遍对单 IP 设硬性 QPS 上限(如 60 次/分钟),超限后直接返回 429 或静默丢包。日志里出现 curl: (28) Operation timed out 或 Connection refused 就是典型信号。更麻烦的是:某个包下载超时(默认 300 秒),后续所有并发请求都得排队等它结束,形成“一个拖垮全部”的雪崩。
必须同时执行的三项操作
只换镜像或只调参数,基本无效。以下三步要一次性做完:
- 全局设低并发:
composer config -g repos.packagist.org.concurrent-downloads 2(注意键名是repos.packagist.org.concurrent-downloads,不是旧版http-max-concurrent-downloads) - 启用多镜像负载均衡:在
composer.json的repositories下添加至少 3 个国内镜像,每个都带"canonical": false—— 缺这个字段,Composer 只认第一个,后面全失效 - 清缓存并验证:
composer clear-cache后,用composer config -g repo.packagist确认输出是完整 JSON(如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}),且结尾有/,否则拼接路径出错导致404
CI/CD 构建中必须关闭的三个干扰项
开发环境有用的参数,在 CI 中全是性能杀手:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
--no-dev:跳过require-dev包(如phpunit),避免测试类污染 autoload classmap -
--no-scripts:禁用post-install-cmd等钩子,防止意外触发npm install或 DB 清理 -
--no-autoloader:不生成vendor/autoload.php,后续用composer dump-autoload --optimize单独补,避免安装时同步扫描 PSR-4 目录
漏掉任意一个,composer install 都可能多花 30%–60% 时间。别信“看起来快一点”,要跑 composer install -vvv 看日志里是否真有多个 Downloading https:// 行交错出现。
镜像同步延迟 ≠ 你本地配置错,但容易被忽略
阿里云/腾讯云镜像同步通常 5–15 分钟,所谓“不同步”八成是本地缓存没刷新。关键点在于:composer clear-cache 不清 packages.json 元数据缓存——它默认 15 分钟内复用本地副本,哪怕镜像站已更新也不会重拉。正确做法是:
- Composer ≥ 2.5:
composer update --refresh(强制丢弃所有 provider 和 packages 元数据缓存,只重拉索引) - Composer rm -rf $(composer config --global cache-dir)/repo/https---mirrors-aliyun-com-composer
- 临时调试加
--no-cache -v,看终端输出的真实请求 URL 是否命中你配的镜像地址
最容易被忽略的是项目级 repositories 字段会完全屏蔽全局配置——哪怕你全局配了阿里云,只要项目 composer.json 里写了 "repositories",Composer 就只认它,连 composer config -g repo.packagist 都查不到生效源。










