最稳定有效的解法是直接换用 GitHub Token。匿名请求限速60次/小时,而有效Token可提升至5000次/小时;需配置具备repo权限的Personal Access Token,并通过composer config -g github-oauth.github.com全局绑定。

直接换用 GitHub Token 就能绕过限速,这是最稳定有效的解法。匿名请求每小时只有 60 次,而带上有效 Token 后提升到 5000 次/小时,绝大多数项目安装都不会再卡住。
为什么会出现 “GitHub API rate limit exceeded”
Composer 在安装依赖时,会通过 GitHub API 查询包的元数据(比如 composer.json、tag 列表、commit 哈希),尤其在使用 vcs 类型仓库或未命中 Packagist 缓存时更频繁。未登录状态下,GitHub 对 IP 限流极严——每小时仅 60 次请求,很容易被 CI、共享网络或高频开发触发。
生成并配置 Personal Access Token
必须使用至少带 repo 权限的 Token(public_repo 不够,私有库需要完整 repo);Token 不能写死在项目里,应通过 Composer 全局凭据管理。
- 访问 https://www.php.cn/link/9c450eb90c31bc12f1691f235da5a0cc,勾选
repo(无需其他权限) - 生成后立即复制 Token 字符串(关闭页面后无法再次查看)
- 执行命令绑定到当前用户:
composer config -g github-oauth.github.com
- 验证是否生效:
composer config -g github-oauth.github.com
应输出你的 Token 前几位(Composer 会自动掩码显示)
确认 Composer 是否真正使用了 Token
常见失效场景:Token 权限不足、配置作用域错误(用了 --global 却误加 --local)、CI 环境未同步配置。可手动触发一次 API 请求验证:
- 运行:
curl -H "Authorization: token
" https://api.github.com/rate_limit - 检查返回中的
rate.limit字段:若为5000,说明 Token 有效;若仍是60,说明请求未携带 Token 或 Token 无效 - Composer 内部调用时,可通过
composer install -v查看日志中是否出现Using GitHub token from configuration
其他辅助手段(Token 失效时备用)
Token 是主方案,但某些受限环境(如公司代理拦截、CI 只读账号)需补充策略:
- 强制走 Packagist 镜像(国内推荐清华源):
composer config -g repo.packagist composer https://packagist.phpcomposer.com
或composer config -g repo.packagist composer https://packagist.proxy.tencent.com
- 禁用 GitHub API 回退机制(避免降级到匿名请求):
composer config -g github-protocols https
- 清理缓存防旧凭据残留:
composer clear-cache
Token 配置本身很简单,但容易栽在权限选错(只勾了 public_repo)、复制时多空格、或在 Docker 构建阶段忘记挂载全局配置。只要确保 composer config -g github-oauth.github.com 有输出,且 curl 测试返回 limit: 5000,基本就稳了。










