Composer 不支持项目级 composer.json 中的 gitlab-token 或 github-oauth 配置,仅认全局 auth.json、COMPOSER_AUTH 环境变量或 SSH 密钥;http-basic 域名须与仓库 URL 完全一致(含端口、子域),且 auth.json 权限需为 600;COMPOSER_AUTH 必须是合法 JSON 格式,GitLab 要求 password 非空,GitHub 则不适用该机制;vcs 仓库 URL 必须以 .git 结尾;仅用户级 Personal Access Token 有效,项目级 token、CI_JOB_TOKEN、Deploy Token 均不被支持。

Composer 本身不认 gitlab-token 或 github-oauth 这类配置项在项目级 composer.json 里——写了也白写,还会造成明文泄露。真正起作用的只有三处:全局 auth.json、COMPOSER_AUTH 环境变量、或 SSH 密钥体系。
为什么 composer config http-basic 配了还是 401?
常见错误是域名没对齐。比如仓库 URL 是 https://gitlab.example.com/group/pkg.git,那必须执行:
composer config --global http-basic.gitlab.example.com token ""
填 gitlab.com、example.com 或漏掉端口(如 gitlab.example.com:8080)都会失败。验证方式是:
- 运行
composer config --global --list | grep http-basic,确认输出里有完全匹配的 key - 检查
~/.composer/auth.json文件权限是否为600,否则 Composer 拒绝读取 - 如果用了自建 GitLab,
auth.json里的 host 名必须和浏览器访问地址一字不差(含协议、端口、子域)
COMPOSER_AUTH 环境变量怎么写才合法?
这个变量值不是 key=value 字符串,而是完整、无换行、双引号包裹的 JSON,且必须符合 Composer 认证结构:
{"http-basic":{"gitlab.example.com":{"username":"token","password":"glpat-xxx"}}}
注意以下几点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
password字段不能空着(GitLab 要求),但 Private Packagist 要求password为空字符串"" - GitHub 不走
http-basic,它用github-oauth结构,所以COMPOSER_AUTH对 GitHub 无效 - GitLab CI 中,直接在
.gitlab-ci.yml的variables下写该 JSON;GitHub Actions 则用 Secret 存整段字符串,别只存 token - CI 工作流中,避免用
echo命令生成auth.json,日志可能捕获明文
vcs 类型仓库必须显式声明 .git 后缀
当 composer.json 的 repositories 里 type 是 vcs,但 URL 不以 .git 结尾,Composer 会误判为 dist 源,然后尝试调用 GitLab API 下载 zip 包——这必然失败,因为私有库默认禁用匿名 API。
正确写法只有这一种:
{
"repositories": [
{
"type": "vcs",
"url": "https://gitlab.example.com/group/project.git"
}
]
}
如果用 Deploy Token,不要硬编码进 composer.json,而应通过 COMPOSER_AUTH 注入,或在 CI 中用 sed 替换占位符(如 https://oauth2:${GITLAB_TOKEN}@gitlab.example.com/...)。
GitHub 和 GitLab 的 token 权限不能混用
GitHub PAT 必须勾选 repo(读私有仓库),read:packages 只用于 GitHub Packages Registry;GitLab PAT 必须勾选 read_repository,光有 api 或 read_user 会导致 401 且错误信息极不明确。
容易被忽略的是:GitLab 的项目级 token、CI_JOB_TOKEN、Deploy Token 全都不被 Composer 支持——只认用户级 Personal Access Token,且必须由目标用户本人生成并授权。

















