私有仓库拉取失败主因是repositories顺序错误或URL不可达;须将私有源置于数组首位,确保其packages.json合法且返回200,同时用curl或git手动验证可达性。

私有仓库拉取失败,90% 是配置顺序或 URL 可达性问题,不是认证没配好。
私有源必须放在 repositories 数组最前面
Composer 会按 repositories 数组顺序逐个尝试匹配包名。如果阿里云镜像(https://mirrors.aliyun.com/composer/)写在私有源前面,它就会先去镜像查你的 mycorp/utils —— 镜像根本没这个包,直接返回 404。
- 正确写法:
"repositories": [{"type": "composer", "url": "https://your-private-repo.com/"}, {"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}] - 错误写法:
"repositories": [{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}, {"type": "composer", "url": "https://your-private-repo.com/"}] -
repo.packagist字段对私有源完全无效,别往那儿塞
用 curl 或 git 直接验证 URL 是否真能通
别等 composer install -vvv 跑完才怀疑——先手动确认底层链路是否畅通。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 对于
type: "composer"私有源:运行curl -I https://your-private-repo.com/packages.json,必须返回200 OK且Content-Type: application/json - 对于
type: "vcs"(如 GitLab):运行git ls-remote -h https://gitlab.example.com/group/pkg.git,能列出 ref 才算通 - Docker 或 CI 中 URL 写
http://localhost:8080必然失败,容器里localhost指的是自己,不是宿主机
CI 环境下认证失效,不是 token 没配,而是根本没进环境
本地能装、CI 报 401/403,大概率是 auth.json 没生效。GitHub Actions、GitLab CI 默认不读你本地的 ~/.composer/auth.json。
- 用 secrets 注入,例如 GitHub Actions 中:
COMPOSER_AUTH: '{"http-basic":{"your-private-repo.com":{"username":"${{ secrets.PRIVATE_REPO_USER }}","password":"${{ secrets.PRIVATE_REPO_TOKEN }}"}}}' - 确保
auth.json里的域名和repositories中的 URL 完全一致(含端口、协议、大小写) - HTTPS 自签名证书场景下,
composer.json的config段加"secure-http": false仅限内网,且要确认 PHP 的openssl.cafile路径没被覆盖
运行 composer show -p 包名 -vvv 看真实请求路径
这是最准的诊断动作。日志里会明确打出 Composer 实际向哪个 URL 发起了请求,以及为什么跳过某个源。
- 如果出现
Skipping repository ... due to missing provider,说明该私有源的packages.json根本没声明提供这个包(name字段不匹配或未 build) - 如果看到请求发到了镜像地址而非私有地址,回头检查
repositories顺序 - 加
--no-plugins参数重试(composer install --no-plugins -vvv),可排除插件干扰,快速定位是不是基础鉴权层的问题
最容易被忽略的是:私有源服务(如 Satis、Private Packagist)返回的 packages.json 必须包含完整的 packages 顶层键,且每个包对象里要有合法的 name 和 version;空 JSON 或结构错位,Composer 会静默跳过,连错误都不报。

















