私有包不能走镜像源,根本原因是镜像仅同步packagist.org公开包,不代理、不转发、不缓存任何私有请求;私有源必须置于repositories数组首位,且type与URL严格匹配,否则静默失败。

私有仓库不能走镜像源,根本原因不是配置漏了,而是机制不支持
Composer 中文镜像(如阿里云 https://mirrors.aliyun.com/composer/)只同步 packagist.org 的公开元数据和 ZIP 包,对 GitLab、GitHub 或自建 Satis 上的私有包完全无感知。你哪怕把私有仓库 URL 改成镜像地址、设 "type": "composer",Composer 也会去请求 https://mirrors.aliyun.com/composer/packages.json —— 这个文件里压根没有你的 internal/auth-sdk,结果必然是 404 或 Could not find package。
这不是权限或网络问题,是设计使然:镜像不代理、不转发、不缓存任何私有请求。
- 镜像只服务
packagist.org的子集,不提供“私有包中转”能力 -
auth.json对镜像无效——镜像不需要认证,也不读取你的 token - 用
http-basic配 GitLab?它只对type: composer源生效,vcs类型下直接被忽略
repositories 数组顺序决定私有包能否被看到
当 composer.json 同时声明镜像源和私有源时,Composer 按数组顺序逐个查找。一旦前面的源返回 “包不存在”,就不会继续往后查——哪怕后面就写着你的 GitLab 地址。
典型错误写法:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
"repositories": [
{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"},
{"type": "vcs", "url": "https://gitlab.example.com/myorg/sdk.git"}
]
上面这段会导致 Composer 先去镜像查 myorg/sdk,404 后直接报错,根本不会走到第二项。
- 私有源必须放在
repositories数组首位 - 禁用默认源的
{"packagist.org": false}也得放第一位(它本身不提供包,只是开关) - 正确顺序示例:
[{"packagist.org": false}, {"type": "vcs", "url": "https://gitlab.example.com/myorg/sdk.git"}, {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}] - 所有 URL 必须以
/结尾,否则路径拼接出错,返回 404
type 字段填错会导致静默失败,而不是报错
Composer 不校验 type 和 url 是否匹配。你写 "type": "vcs" 却给一个 Satis 地址,或写 "type": "composer" 却填 GitLab 网页 URL,它不会提示,只会查不到包,最后统一报 Could not find package vendor/name。
-
vcs类型:URL 必须是可git clone的地址,含.git后缀,例如https://gitlab.example.com/myorg/sdk.git -
composer类型:URL 必须能返回合法packages.json,浏览器打开https://your-satis.internal/packages.json应看到 JSON 数据 - 验证方式:手动执行
git clone https://gitlab.example.com/myorg/sdk.git;再确认该仓库main分支根目录有composer.json,且其中"name"是两段式(如"myorg/sdk")
auth.json 放错位置或权限不足,Git clone 就会卡住
私有 Git 仓库必须靠 auth.json 提供凭据,但这个文件的位置、格式、token 权限三者缺一不可。
- Linux/macOS 路径是
~/.composer/auth.json,Windows 是%APPDATA%\Composer\auth.json;composer config --list可确认实际加载路径 - 内容必须是
{"gitlab-token": {"gitlab.example.com": "glpat-xxxxxxxx"}},不是http-basic,也不是嵌套在其他字段里 - Token 必须同时勾选
read_api(查项目是否存在)和read_repository(克隆代码),少一个就会卡在Cloning into '...' - CI/CD 环境(如 GitHub Actions、宝塔计划任务)常以非登录用户运行,
~/.composer/auth.json对它不可见——必须在流水线里显式注入或挂载
最易被忽略的是:改完 composer.json 后,composer.lock 里仍存着旧源的 dist.url 和 dist.shasum,导致 composer install 死磕原始 URL 校验失败。删掉 vendor 和 composer.lock 再重装,才是干净起点。

















