composer如何解决API速率限制_composer配置GitHub Token【解决】

2次阅读

composer install卡在github是因api限速(60次/小时),需配置github Token提升至5000次/小时:执行composer config -g github-oauth.github.com ,ci中用composer config –auth或$github_token动态注入,并定期用composer diagnose检查有效性。

composer如何解决API速率限制_composer配置GitHub Token【解决】

Composer install 时卡在 github.com 或报 rate limit 错误

Composer 默认用未认证方式访问 GitHub API,每小时最多 60 次请求。一旦超限,composer install 就会卡住或直接报错:Failed to download vendor/package: Could not fetch https://api.github.com/... 403 rate limit exceeded。这不是网络问题,是 GitHub 的硬性限制。

解决办法是让 Composer 带上个人 GitHub Token 认证,把配额提到每小时 5000 次。不需要改项目代码,只改本地 Composer 配置:

为什么不能用 auth.json 放项目里

有人试过在项目根目录放 auth.json 并写入 token,但这是危险且无效的常规操作——因为 auth.json 默认只读取全局或用户家目录下的版本,项目级的 auth.json 不会被 Composer 加载(除非显式指定 --auth,但 install 过程中不会用到)。

更关键的是:把 token 提交进 Git,等于公开泄露凭证。GitHub 会自动扫描并禁用这类 token。所以必须用 composer config -g 写入全局配置,既安全又生效。

  • -g 表示 global,写入 ~/.composer/auth.json,仅当前用户可见
  • 不要手动编辑 auth.json 文件,容易格式出错导致后续所有 Composer 命令失败
  • 如果已误提交 token,请立刻去 GitHub 后台 revoke,并重生成

CI 环境(如 GitHub Actions)怎么配 Token

CI 场景下不能用 -g,因为每次都是干净环境。必须在运行前动态注入,且不能硬编码。

以 GitHub Actions 为例,正确做法是利用 GITHUB_TOKEN(自带、作用域受限但足够)或自定义 secret:

  • 在 workflow 中加一步:composer config github-oauth.github.com ${{ secrets.MY_GITHUB_TOKEN }}
  • 或者更稳妥地用 composer config --auth(作用于当前项目目录):composer config --auth github-oauth.github.com ${{ secrets.MY_GITHUB_TOKEN }}
  • 避免用 echo '{"github-oauth": {"github.com": "xxx"}}' > auth.json,JSON 转义易错,且权限可能不对

Token 失效后 Composer 不报错但降级回限速模式

Token 被 revoke 或过期后,Composer 不会提示“token invalid”,而是静默退回到未认证状态——于是又回到每小时 60 次限制,错误重现。这个降级行为极难察觉,尤其在 CI 上表现为偶发失败。

排查方法很简单:

  • 运行 composer diagnose,看输出里是否有 GitHub API: OK(有 token 且有效)或 GitHub API: Not working(token 失效或没配)
  • 临时加 -v 参数跑一次 composer update -v,留意日志里是否出现 using GitHub token from configuration
  • 别依赖 “没报错=没问题”,rate limit 是服务端返回 403,Composer 客户端默认吞掉细节

真正麻烦的不是配不上,而是配了却失效了还浑然不觉。定期检查 composer diagnose 输出比等 CI 报错更省时间。

text=ZqhQzanResources