gitlab-domains并非Composer官方配置项,真实有效的是auth.json中gitlab-token对象下的域名键名,必须与仓库URL的host部分完全一致,用于精准路由认证凭证。

gitlab-domains 是什么?它根本不存在
Composer 官方配置项里没有 gitlab-domains 这个字段,也不支持在 composer.json 或 auth.json 中直接写这个 key。你搜到的“gitlab-domains”大概率是混淆了 GitLab 实例域名、gitlab-token 配置方式,或是把 CI 变量名当成了 Composer 配置项。
真正起作用的是 auth.json 里的域名键名
Composer 识别 GitLab 域名靠的是 auth.json 中 gitlab-token 下的 **对象键(key)**,必须和仓库 URL 的 host 部分完全一致——包括端口、协议头都不参与匹配,只比对纯域名字符串。
-
https://gitlab.example.com/group/pkg.git→ 键名必须是"gitlab.example.com" -
https://gitlab.example.com:8443/group/pkg.git→ 键名必须是"gitlab.example.com:8443",和上面视为两个不同域 -
https://mygit.internal/group/pkg.git→ 键名必须是"mygit.internal",不能写成"https://mygit.internal"或"mygit.internal/"
示例 ~/.composer/auth.json(权限必须为 600):
{
"gitlab-token": {
"gitlab.example.com": "glpat-xxxxxxxxxxxxxxxxxxxx",
"mygit.internal": "glpat-yyyyyyyyyyyyyyyyyyyy"
}
}
COMPOSER_AUTH 环境变量怎么填域名
用环境变量替代 auth.json 时,JSON 结构里 http-basic 下的域名键规则相同,但注意这是给 HTTPS Basic Auth 用的,和 gitlab-token 不兼容——GitLab 的 Personal Access Token 不走 Basic Auth,所以这个方式只适用于 Deploy Token 场景。
用大白话操作当前项目的 Git/GitHub——配置 GitHub(装 gh CLI + 登录 + 建仓库)、备份、拉取下载、查询历史、回滚代码、管理分支。当用户用日常语言表达 git 意图时触发(例如"git备份一下""git下载项目""git拉下来""git看看我改了啥""git回退到上一个版本""git新建个分支搞新功能""git合并到主分支""git
- Deploy Token 用户名是
deploy-token-123,密码是 token 值,填入http-basic对应域名下 - Personal Access Token(PAT)不能塞进
http-basic,否则会 401;它只认gitlab-token+ 域名键的组合 - 环境变量写法:
export COMPOSER_AUTH='{"http-basic":{"gitlab.example.com":{"username":"deploy-token-123","password":"abc456def789"}}}'
为什么总是 401 或 “Could not fetch”
绝大多数情况不是域名写错,而是认证没落到对应 host 上:
- 运行
composer config -g gitlab-token.gitlab.example.com看是否已全局配置,优先级高于auth.json - 检查
composer.json里repositories.url是否以.git结尾,不带则无法触发 vcs 解析 - 确认 GitLab Token 权限:PAT 必须含
read_api和read_repository;Deploy Token 必须有read_repository - 私有包未打 tag 却用了
"1.0.0"这类约束,Composer 会去 API 查 dist 包——而私有库默认关 API 或没发布 dist,结果报 fetch 失败;此时应改用"dev-main"或补上对应 tag
域名本身不参与网络请求构造,它只是 Composer 内部做凭证路由的“钥匙”。钥匙插错锁孔,再好的 token 也打不开门。










