使用 github personal access Token 配置 composer 认证可将 api 限额从 60 提升至 5000/小时:访问 https://github.com/settings/tokens/new 创建带 repo 或 public_repo 权限的 token,执行 composer config –global github-oauth.github.com 配置,ci 中需通过 secrets 注入。

Composer install 报错 “GitHub API rate limit exceeded” 怎么办
这是 GitHub 对未认证请求的限流触发,Composer 默认走匿名 API 调用,每小时最多 60 次。一旦你本地有多个项目、或 CI 环境频繁拉包,很容易撞上这个限制。
- 错误典型表现:
Failed to download vendor/package: Could not fetch https://api.github.com/repos/xxx/xxx, HTTP 403,并附带"message": "API rate limit exceeded" - 不是网络问题,也不是 Composer 版本 bug,本质是 GitHub 认为你没登录
- 解决核心:让 Composer 使用带身份的 GitHub Token 发起 API 请求,把限额从 60 提升到 5000/小时
怎么配 GitHub Personal Access Token 给 Composer 用
Token 必须带 repo 权限(私有库需要)或至少 public_repo(仅公开库),其他权限一律不勾。别用 admin:org 这类高危权限,也别把 Token 写进 composer.json 或 Git 历史里。
- 去
https://github.com/settings/tokens/new创建 token,命名建议带composer-cli后缀便于识别 - 在终端执行:
composer config --global github-oauth.github.com <your_token_here></your_token_here> - 验证是否生效:运行
composer config --global --list | grep github-oauth,应看到非空输出 - 如果公司用 GitHub Enterprise,域名要换成实际地址,比如
composer config --global github-oauth.ghe.example.com <token></token>
为什么用了 Token 还报 rate limit
常见不是 Token 本身失效,而是 Composer 没走对认证通道,或者 Token 权限不足。
- 检查是否误配了
gitlab.com或其他域名的 oauth 配置,干扰了 GitHub 请求路由 - 确认 Token 没过期(Personal Access Token 默认永不过期,但可手动删)
- CI 环境(如 GitHub Actions)中,
GITHUB_TOKEN是临时的,不能直接塞给 Composer;得用secrets.GITHUB_TOKEN注入为环境变量,再通过composer config github-oauth.github.com ${{ secrets.GITHUB_TOKEN }}动态配置 - 某些旧版 Composer(composer self-update 最新版能避开
不用 Token 的临时绕过方案(仅限开发机)
如果你只是偶尔跑一下、不想配 Token,可以用 ssh 替代 HTTPS 协议拉取——前提是你的 GitHub 账号已配好 SSH key 且能 ssh -T git@github.com 成功。
- 执行:
composer config --global github-protocols ssh - 它会让 Composer 把所有
https://github.com/xxx/xxx自动转成git@github.com:xxx/xxx.git - 注意:这招对私有仓库有效,但对依赖中硬编码了 HTTPS URL 的包(比如某些
repositories自定义源)可能无效 - 副作用:SSH 不走 GitHub API,所以不会触发 rate limit,但无法获取 release 信息、跳过某些 metadata 请求,极少数插件行为可能异常
Token 配一次能用很久,但很多人卡在第一步——生成时漏勾 public_repo,或者复制时多粘了个空格。真正麻烦的不是配置动作,而是错误提示里根本不告诉你缺哪项权限。