GitLab Token应写在auth.json中,Linux/macOS路径为~/.composer/auth.json,Windows为%APPDATA%\Composer\auth.json;需配置gitlab-token字段,域名精确匹配,Token权限须含read_api和read_repository。

GitLab Token写在哪?不是config.json,是auth.json
Composer读取凭证只认auth.json,不是项目根目录的composer.json,也不是全局config.json。很多人把Token塞进composer.json的config字段里,结果始终401——因为那地方根本不解析认证信息。
正确位置是用户主目录下的auth.json(Linux/macOS:~/.composer/auth.json;Windows:%APPDATA%\Composer\auth.json),或者项目级的./auth.json(需配合COMPOSER_AUTH环境变量或--auth参数才生效)。
-
auth.json必须是合法JSON,顶层是对象,不能有多余逗号 - Token要放在
gitlab-token字段下,不是token或access_token - 域名必须精确匹配:GitLab实例地址(如
https://gitlab.example.com),协议、端口、路径都要一致
Token权限够不够?private\_token ≠ api\_scope
GitLab个人访问令牌(Personal Access Token)必须勾选read_api和read_repository——只选api不行,read_repository单独控制Git克隆权限,而Composer在安装时既查包元数据(API),又走Git协议拉代码。
如果遇到Could not fetch https://gitlab.example.com/api/v4/projects/...: 403 Forbidden,大概率是Token缺read_api;若报Failed to download ...: Failed to execute git clone --mirror...,则是read_repository没开。
- 不要用Deploy Token:它不支持API调用,Composer会卡在metadata获取阶段
- Group-level Token在GitLab 15.6+才支持
read_api,旧版本必须用Personal Token - Token泄露风险高,建议为Composer单独建一个最小权限Token,不用复用CI/CD用的
私有仓库怎么声明?require里不能写git+https
Composer不识别git+https://这种写法作为包源。必须在composer.json里显式声明repositories,类型设为vcs,URL指向GitLab项目的.git结尾地址(不是网页URL)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
例如GitLab项目页面是https://gitlab.example.com/mygroup/mypackage,那么url字段得填https://gitlab.example.com/mygroup/mypackage.git。少一个.git,Composer会当成HTTP源去抓composer.json,而不是走Git协议。
- 如果仓库是子组嵌套(如
mygroup/subgroup/mypackage),URL里的路径必须完全一致,大小写敏感 - 别在
repositories里加type: package手动定义——那绕过了Token认证机制,无法拉私有代码 - 多个私有包共用同一GitLab实例时,
auth.json里只需一条gitlab-token记录,无需重复配置
为什么有时能装有时401?注意Composer缓存和Git凭据冲突
Composer内部用Git命令拉代码,而Git本身可能已配置了git config --global credential.helper(比如系统钥匙串或Git Credential Manager)。一旦Git凭据里存了过期账号密码,它会优先用那个,覆盖Composer的auth.json Token,导致401。
更隐蔽的是Composer的cache-dir:如果之前用错误Token失败过,部分元数据可能已缓存,下次即使改对了auth.json,仍会复用旧缓存返回401。
- 先清Git凭据:
git credential reject输入protocol=https、host=gitlab.example.com清除 - 再清Composer缓存:
composer clear-cache,不是dump-autoload - 调试时加
-v参数看实际请求头:composer install -v会打印是否带Authorization: Bearer xxx
GitLab的Token有效期、域名拼写、.git后缀、Git凭据残留——这四个点错一个,就会静默失败。没有“基本配置完就能跑”的侥幸空间。

















