composer 卡在 github.com 或报 github api rate limit exceeded,是因为未认证请求被限速至每小时60次;需配置 github oauth token 将限额提至5000次/小时,或在纯 packagist 场景下切换国内镜像源。

Composer 安装或更新包时卡在 github.com,或者报错 GitHub API rate limit exceeded,不是你网络差,是 GitHub 对未认证的 API 请求做了严格限速(每小时 60 次),而 Composer 默认走的就是未认证的公开 API。
为什么 Composer 会触发 GitHub API 限速
Composer 在解析 composer.json 中的 packagist.org 包时,若包源是 GitHub(比如 "type": "vcs" 或某些私有包),会通过 GitHub API 获取最新 commit、tag 列表或 zip 下载链接。Packagist 自身也依赖 GitHub API 做同步 —— 所以即使你没直接写 GitHub 地址,也可能中招。
常见错误现象包括:
- 执行
composer update卡住十几秒后报Failed to download vendor/package: GitHub API limit exhausted -
composer install时反复重试,最终失败,日志里出现403 rate limit exceeded - CI 环境(如 GitHub Actions)里突然批量失败,本地却正常
给 Composer 配置 GitHub OAuth Token(最直接有效)
GitHub 对带有效 OAuth Token 的请求,限额升到每小时 5000 次,够绝大多数项目用。关键是让 Composer 知道这个 token。
实操建议:
- 去 GitHub Settings → Developer settings → Personal access tokens → Tokens (classic),生成一个新 token,勾选
repo(仅需读权限,public_repo就够) - 运行命令写入全局配置:
composer config -g github-oauth.github.com <your_token_here></your_token_here> - 验证是否生效:
composer config -g github-oauth.github.com应该输出 token 前几位(Composer 会自动掩码显示) - 注意:token 不要硬编码在项目
composer.json或提交到 Git;CI 中应设为 secret 变量,再通过环境变量注入:COMPOSER_AUTH='{"github-oauth":{"github.com":"xxx"}}'
换镜像源或跳过 GitHub API(适合纯 Packagist 场景)
如果你的项目完全不依赖 GitHub VCS 包(即所有包都来自 Packagist 官方源),可以绕开 GitHub API,改用国内镜像加速。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
但要注意:镜像只是缓存 Packagist 元数据,**不代理 GitHub 原始代码下载**。所以 composer install 最终仍可能去 GitHub 下 zip —— 这时候 token 还是得配。
临时切镜像(推荐阿里云):
- 全局替换:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 只对当前项目:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/ - 想彻底禁用 GitHub API?不行。Composer 3.x 起已移除
disable-tls类旧参数,也没提供“强制走 zip 下载不查 API”的开关
CI/CD 中的典型坑与应对
GitHub Actions、GitLab CI 等环境共享 IP,多个 job 同时跑,极易撞上 60 次/小时的匿名限额。
容易踩的坑:
- 误以为加了
actions/checkout就自动带 GitHub Token —— 实际上 Composer 不会自动读取GITHUB_TOKEN环境变量 - 把 token 写死在 workflow YAML 里,导致泄露(GitHub 会自动扫描并 revoke)
- 用了镜像源,但没配 token,结果
composer install仍因下载阶段访问 GitHub 而失败
正确做法:
- 在 workflow 中用
COMPOSER_AUTH环境变量注入 token:COMPOSER_AUTH: '{"github-oauth":{"github.com":"${{ secrets.GITHUB_TOKEN }}"}' - 确保
secrets.GITHUB_TOKEN权限足够(默认就有contents: read) - 如果用自建私有 Packagist(如 Satis 或 Private Packagist),就彻底脱离 GitHub API,但那是另一套架构成本
真正麻烦的不是配 token 这一步,而是很多人直到 CI 大量失败才意识到:Composer 和 GitHub API 是强耦合的,且这个耦合藏得深——它不报错在“连不上 GitHub”,而是在“拿不到 tag 列表”这种抽象环节。token 一旦漏配或过期,问题就会断续出现,很难复现。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










