加 GitHub Token 后变快,是因为认证后 API 限流从60次/小时升至5000次/小时,Composer 能正常获取元数据并走高速 git clone,而非低效 ZIP 下载或重试。

Composer 下载 GitHub 包慢,本质是没走 GitHub API 的认证通道,触发了匿名限流(60 次/小时),导致 composer install 卡在 Cloning into '...' 或反复重试。加 GitHub 令牌后,速率上限升至 5000 次/小时,且能直连 GitHub Git 服务器(而非走 Composer 镜像中转),这才是真正有效的加速。
为什么加 TOKEN 就能变快
GitHub 对未认证的 Git 克隆请求(git clone https://github.com/...)不做限流,但 Composer 默认用 GitHub API 查询包元数据(如 https://api.github.com/repos/monolog/monolog),这部分被限流;一旦元数据查不动,Composer 就 fallback 到低效的 ZIP 下载或反复重试。加了 token 后,API 调用畅通,Composer 才能正常走 git clone git@github.com:... 或高速 HTTPS 克隆。
- Token 必须有
repo权限(私有库需要,公开库也建议配全) - 不能只配在
auth.json里就完事——还要确保 Composer 实际用到了它(比如没被COMPOSER_AUTH环境变量覆盖) - GitHub App tokens、OAuth tokens、classic personal access tokens 都可以,但 GitHub CLI 登录生成的 token(
gh auth login)默认不含repo权限,需手动补
配置 GitHub Token 的三种可靠方式
优先级从高到低:环境变量 > 全局 auth.json > 项目级 auth.json。生产环境推荐环境变量,本地开发用全局配置更省事。
- 用环境变量(最稳,绕过所有文件权限问题):
export COMPOSER_AUTH='{"github-oauth": {"github.com": "ghp_xxx..."}}' - 写入全局
auth.json(推荐开发机):composer config -g github-oauth.github.com ghp_xxx...
- 项目内配置(不推荐,易误提交):
composer config github-oauth.github.com ghp_xxx...
,会写入项目根目录auth.json,记得加进.gitignore
验证 Token 是否生效的关键检查点
别只看 composer install 是否“没报错”,要确认它真正在用 token 发 API 请求:
- 运行
composer diagnose,末尾应显示GitHub API: OK;如果显示rate limit: 60,说明 token 没生效 - 临时删掉 token,执行
composer show monolog/monolog -vvv 2>&1 | grep 'api.github.com',能看到大量 403 响应;加回 token 后,同一命令应返回 200 且rate limit显示为 5000 - 注意:某些国内镜像源(如腾讯云、阿里云)会屏蔽 GitHub API,即使配了 token 也无效——必须关掉镜像:
composer config --global repo.packagist composer https://packagist.org
常见失效场景与绕过方案
Token 配了还是慢?大概率掉进了这几个坑:
-
git协议被公司防火墙拦截(git@github.com:...走 SSH 端口 22),此时 Composer 会退化回 ZIP 下载。解决:强制走 HTTPS 克隆:composer config --global github-protocols https
- PHP cURL 不支持 HTTP/2,而 GitHub API 强制 HTTP/2 响应,旧版 PHP(features 不含
CURL_VERSION_HTTP2,升级 PHP 或换系统 cURL - 公司代理或 DNS 劫持了
api.github.com,可临时改 hosts:140.82.121.3 api.github.com
(以nslookup api.github.com实际 IP 为准)
Token 本身不是银弹——它只解决 GitHub API 层的瓶颈。如果网络层(DNS、TLS 握手、Git 克隆)卡住,再高的 API 额度也没用。先确认 git clone https://github.com/.../some-package.git 能秒下,再排查 Composer 配置。











