Composer提示“API rate limit exceeded”是因未配置GITHUB_TOKEN导致GitHub匿名API调用超60次/小时限额;配置含public_repo权限的Token可提升至5000次/小时,并需通过composer config -g github-oauth.github.com正确设置。

Composer 提示 “API rate limit exceeded” 就是 GitHub 的 API 限流触发了,本质不是 Composer 问题,而是你没配 GITHUB_TOKEN,导致所有请求都走匿名通道,每小时只能 60 次。
为什么没配 Token 就会限流
Composer 从 v2 开始默认通过 GitHub API 获取包元数据(比如 composer show、composer update),而未认证的 API 请求共享一个匿名配额:每小时最多 60 次。一旦团队共用一台机器、CI 环境频繁拉包、或本地反复试错,很容易撞墙。
配了个人 GITHUB_TOKEN 后,请求变成用户级,配额升到每小时 5000 次,基本够用。
怎么生成并配置 GitHub Token
Token 必须带 repo 权限(只读即可),不能用 gist 或 admin:org 这类高危权限。
- 访问 https://www.php.cn/link/9c450eb90c31bc12f1691f235da5a0cc,勾选
public_repo(私有库需额外勾repo) - 生成后立即复制保存——页面关闭后无法再次查看明文
- 在终端运行:
composer config -g github-oauth.github.com
- 验证是否生效:
composer config -g github-oauth.github.com
应输出你的 token 前几位(Composer 会自动掩码显示)
常见踩坑点
配了 Token 还报限流?大概率是以下几种情况:
- Token 权限不足:只勾了
gist或没勾repo,必须含public_repo - 配错域名:命令里写成
github.com是对的,但有人误写成api.github.com或带https:// - CI 环境未注入:GitHub Actions 要在
env:下显式传入GITHUB_TOKEN,且注意它默认不继承给子 shell,需用composer config github-oauth.github.com ${{ secrets.GITHUB_TOKEN }} - 用了企业版 GitHub(GHES):要配对应实例域名,如
git.example.com,而非github.com
临时绕过限流的应急操作
如果 Token 还没准备好,又急需更新依赖,可用本地缓存降级:
- 加
--prefer-dist强制走 zip 包下载(跳过 API 查询):composer update --prefer-dist
- 用镜像源(仅限 Packagist 包):
composer config -g repo.packagist composer https://packagist.phpcomposer.com
(注意该镜像已停,推荐https://packagist.org官方中国镜像:https://packagist.laravel-china.org,但仅缓解元数据查询压力,不解决 GitHub API 限流) - 删掉
vendor/和composer.lock后重装,有时能避开部分元数据刷新逻辑
真正可靠的解法只有配 Token;其他都是权宜之计。别把 GITHUB_TOKEN 硬编码进 composer.json 或提交到 Git,它等同于密码。










