需配置 GitHub personal access token(PAT)并设 repo 权限,通过全局 auth.json 或 composer config 注入;私有仓库依赖须在 composer.json 中用 HTTPS 格式显式声明 vcs 类型 repositories。

怎么让 Composer 能拉取 GitHub 私有仓库?
Composer 默认无法访问 GitHub 私有仓库,因为没权限。核心解法是:用 GitHub 的 personal access token(PAT)代替密码做认证,并通过 composer config 或 auth.json 注入凭证。
配置 GitHub OAuth 令牌的两种实操方式
推荐优先用全局 auth.json 方式,避免把 token 写进项目 composer.json;但若需多环境差异化配置(比如 CI/CD),可改用 composer config 命令注入。
- 全局配置(推荐):在
~/.composer/auth.json(Linux/macOS)或%APPDATA%\Composer\auth.json(Windows)中写入:
{
"github-oauth": {
"github.com": "ghp_xxx..."
}
}
注意:ghp_xxx... 是你在 GitHub Settings → Developer settings → Personal access tokens → Generate new token 中创建的 token,必须勾选 repo 权限(私有库必需)。
- 项目级配置(临时/调试用):执行命令(token 会明文存进当前项目的
composer.json的config.gitlab-token字段,不推荐长期使用):
composer config github-oauth.github.com ghp_xxx...
在 composer.json 中正确声明私有仓库依赖
不能只写 "vendor/repo": "dev-main" 就完事——Composer 不知道从哪拉。必须显式声明 repositories,类型设为 vcs,URL 用 HTTPS(不是 SSH)格式,且域名必须是 github.com。
- 错误写法(SSH 地址、缺 repositories、或用 git@):
"repositories": [
{
"type": "vcs",
"url": "git@github.com:myorg/private-lib.git"
}
]
- 正确写法(HTTPS + 显式声明):
"repositories": [
{
"type": "vcs",
"url": "https://github.com/myorg/private-lib.git"
}
],
"require": {
"myorg/private-lib": "dev-main"
}
执行 composer update myorg/private-lib 后,Composer 会自动用 auth.json 里的 token 向 GitHub 认证。
常见失败现象和排查点
拉取失败时,别急着重试,先看错误是否暴露关键线索:
-
Could not fetch https://api.github.com/... 401 Unauthorized→ token 过期、权限不足(缺repo)、或拼写错误(比如写成github.com但 token 绑的是api.github.com) -
Failed to clone https://github.com/xxx/yyy.git→ URL 写成了 SSH 格式,或仓库名大小写与 GitHub 实际不符(GitHub 仓库名区分大小写) - 本地能装,CI 上失败 → CI 环境没配置
auth.json,或用了composer config但没加--global参数 - token 暴露在日志里 → 检查是否误用了
composer config --auth(它会把 token 写进auth.json的http-basic区域,对 GitHub 无效)
私有仓库的难点不在配置本身,而在于 token 权限粒度、配置生效范围、以及 HTTPS URL 和认证链路的隐式耦合——漏掉任一环,都会静默失败或报 401。










