Composer install 卡在 github.com 是因默认直连 GitHub API 和源码下载链路,国内常被限速或中断,且频繁 HTTPS 请求导致超时;应配置阿里云镜像源并使用 --no-update 等参数跳过元数据刷新。

为什么 composer install 总卡在 github.com?
不是你的网络真差,而是 Composer 默认走 GitHub 的 API 和源码下载直连(api.github.com 和 github.com),这两条链路在国内常被限速或偶发中断。更关键的是:Composer 会为每个包反复请求 GitHub API 鉴权、查版本、校验 SHA,哪怕你只装一个包,也可能触发几十次 HTTPS 请求。
- 现象:卡在
Downloading https://api.github.com/...或Cloning into '/path/to/cache/...'... - 本质:GitHub 官方接口无 CDN,且未针对中国区优化;Composer 默认不走镜像,也不缓存元数据
- 不是代理问题——即使开了科学上网,API 响应头里的
X-RateLimit-Remaining也常为 0,说明被限频
换国内镜像源:改 composer.json 还是全局配置?
优先用全局配置,避免污染项目文件,也防止团队成员漏配。镜像源只加速包下载(dist),但元数据(packages.json)仍需 GitHub API——所以必须同时处理两者。
- 执行
composer config -g repo.packagist composer https://packagist.phpcomposer.com(已停用)→ 改用:composer config -g repo.packagist composer https://packagist.org+ 配合国内镜像代理层 - 真正有效的做法是用
https://mirrors.aliyun.com/composer/或https://packagist.phpcomposer.com(注意:后者已于 2023 年底停止维护)→ 当前稳定推荐:composer config -g repo.packagist composer https://packagist.phpcomposer.com已不可靠,应切换为:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 验证是否生效:运行
composer config -g repo.packagist,输出应为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - ⚠️ 注意:阿里云镜像不代理 GitHub API,只代理
dist包下载;所以还得单独解决 API 超时
绕过 GitHub API:用 composer install --no-plugins --no-scripts 不够,得关元数据刷新
默认 composer install 会联网检查 package 版本是否变更,触发大量 GitHub API 请求。关掉它,才能跳过那几十个超时点。
- 加
--no-update:跳过composer.lock版本比对,前提是 lock 文件存在且可信 - 加
--ignore-platform-reqs:避免因 PHP 扩展缺失导致回退查兼容版本(间接减少 API 调用) - 最有效组合:
composer install --no-interaction --no-progress --no-suggest --no-update - 如果连
composer.lock都没有,就别硬跑install,先用composer create-project拉完整包,或手动下载dist包解压到vendor/
终极方案:本地缓存 + 离线 fallback
光靠镜像和参数开关,遇到极端网络抖动仍可能失败。真正的稳,是让 Composer 尽量不联网。
- 启用本地缓存:确保
COMPOSER_CACHE_DIR指向 SSD 盘(如/data/composer-cache),避免每次重下 tarball - 预热缓存:在有网环境跑一次
composer update --no-install,只下载dist不写vendor,后续断网也能install - 设置离线模式:临时加
export COMPOSER_DISABLE_NETWORK=1,再跑install—— 此时它只读 cache 和 lock,失败则立刻报错,不卡住 - ⚠️ 容易忽略的点:某些插件(如
hirak/prestissimo)会强制并发拉取,反而加剧超时;现在 Composer 2.2+ 内置并行下载,建议卸载该插件










