根本原因是Composer定义repositories数组后会完全丢弃默认packagist.org隐式源,必须显式添加{"type":"composer","url":"https://packagist.org"}并置于私有源之后以确保公共包可查。

私有包和公共包必须共存,不能禁用 packagist.org;关键不是“加私有源”,而是“显式声明 packagist.org 且控制顺序”。
为什么加了私有仓库 URL 还是找不到包
根本原因不是 URL 写错,而是 Composer 一旦定义了 repositories 数组,就会**完全丢弃默认的 packagist.org 隐式源**——它不会 fallback,也不会自动补上。你写的私有源哪怕完全正确,monolog/monolog 这类公共包也会直接报错。
- 必须手动把
packagist.org显式加回repositories数组里,"type": "composer"、"url": "https://packagist.org"缺一不可 - 私有源要放在数组前面,否则同名包(比如
acme/utils)会被 packagist.org 先匹配到,导致拉取失败或版本错乱 -
"packagist.org": false是彻底关闭官方源的开关,仅适用于 100% 私有生态,普通项目别碰
repositories 数组里 type 和 url 怎么配才不踩坑
不同用途的仓库必须用对应 type,混用会导致静默忽略或解析失败。URL 末尾斜杠、协议、路径结构全是硬性要求。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 私有 Composer 仓库(Artifactory / Private Packagist / Satis):必须
"type": "composer",URL 以https://开头且结尾带/,例如"https://repo.example.com/" - Git 类私有包(直连 GitLab / GitHub):必须
"type": "vcs",URL 要带.git后缀,例如"https://gitlab.example.com/group/pkg.git";它只对require中明确写出的包名生效,不参与全局搜索 - 别写
"type": "git"或留空——Composer 会直接跳过该条目,不报错也不提示 - URL 中的
/api/composer/不可替换为/api/npm/或/composer/,Artifactory 等服务对路径敏感
认证失败(401/403)和元数据不更新怎么办
Composer 不会复用系统级 Git 凭据或 ~/.netrc,私有源认证必须靠 auth.json,且位置、格式、权限三者缺一不可。
-
auth.json必须和composer.json同级,内容严格按格式:{ "http-basic": { "repo.example.com": { "username": "your-api-token", "password": "" } } } - API token 必须有
read权限,Private Packagist 或 Artifactory 后台生成时需勾选对应 scope - Satis 类静态镜像要能被
curl -I https://satis.example.com/packages.json直接返回 200;Nginx 403/404 会导致 Composer 静默走外网 - Private Packagist 的 dev 分支需在后台开启
Enable development version support并手动Resync,否则dev-main永远查不到
最常被忽略的是:改完 composer.json 或 auth.json 后,不删 vendor/ 和 composer.lock 就跑 composer install——缓存会掩盖配置变更,错误依旧。

















