根本解法是配置GitHub OAuth token将API限额从每小时60次提至5000次,执行composer config --global github-oauth.github.com 并确保auth.json权限为600。

Composer 安装包卡在 Cloning into '...'... 或报 403 Forbidden,基本就是 GitHub API 限流触发了——这不是你网络差,是 GitHub 对未认证请求的默认限制(每小时 60 次),而 Composer 默认不带 Token 发请求。
为什么 Composer 会撞上 GitHub 限流?
Composer 在安装依赖时,如果包的 dist 地址不可用(比如被墙、超时),就会 fallback 到 source 类型,即走 git clone 拉取仓库。这个过程会调用 GitHub API 查询最新 commit、tag 等元数据,而这些请求默认以匿名身份发出,极易触发 403。
常见表现包括:
Failed to download vendor/package: Could not authenticate against github.com- 卡在
Cloning into '/path/to/cache/...'...长时间无响应 - 偶尔成功、多数失败,且错误日志里出现
API rate limit exceeded
换国内镜像源:改 packagist.org 为 packagist.phpcomposer.com
这是最轻量、最直接的解法。Composer 的包索引服务(Packagist)本身可被镜像,国内已有稳定可用的替代源,无需改包地址或加 Token。
执行以下命令全局切换:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
验证是否生效:
composer config -g repo.packagist
输出应为:https://packagist.phpcomposer.com。注意不是 https://packagist.cn 或其他非官方域名,后者已失效或不稳定。
如需切回官方源:
OpenClaw 技能 — 给定一个 GitHub 仓库 URL,自动解析出 owner/repo 名称,发现其中的 YAML/properties 配置文件及其配对的中文字段说明;在 `workspace/{repo}/` 目录下按同步日期(格式为 `YYYY-MM-DD`)创建时间戳子目录;写入 `.openclaw-config-state.json` 状态文件。每次用户提问前,先比对远程仓库当前 ref(如 `main` 或 `master`)的最新提交 SHA 与本地状态文件中记录的 SHA:
composer config -g --unset repos.packagist
强制走 dist 下载:禁用 source fallback
很多失败本质是 Composer 主动降级到 git clone,只要确保所有包都从 dist(zip/tar 包)下载,就能完全绕过 GitHub API。
在项目根目录的 composer.json 中添加:
"config": {
"preferred-install": {
"*": "dist"
},
"fxp-asset": {
"installer-paths": {
"npm-asset-library": "vendor/npm-asset",
"bower-asset-library": "vendor/bower-asset"
}
}
}
关键点:
-
"*": "dist"强制所有包优先走压缩包下载,不尝试 clone - 若项目中已有
"source"类型的私有包,需显式为其指定"type": "package"并提供dist地址,否则仍会 fallback - 部分老旧包的
composer.json中未声明dist,此时需配合镜像源 + Token 才能兜底
加 GitHub Token:仅对 source 包必要时启用
当必须走 source(比如要调试某包的 dev 分支),又无法避免 API 调用时,Token 是唯一可靠方案。
生成 Personal Access Token:
- 访问 GitHub → Settings → Developer settings → Personal access tokens → Generate new token
- 勾选
public_repo(够用,不必给admin:org等高危权限) - 复制生成的 token 字符串
配置到 Composer:
composer config -g github-oauth.github.com <your-token-here>
注意:github.com 是固定域名,不能写成 api.github.com 或带 https://;Token 一旦配置,Composer 所有 GitHub 请求都会自动带上 Authorization 头。
容易忽略的一点:Token 只对 GitHub 域名生效,不影响 Packagist 元数据查询——所以仍建议搭配镜像源使用,双保险。

















