Composer仓库优先级由repositories数组顺序决定:从上到下线性匹配,首个返回200且含目标包元数据的仓库即生效,后续全跳过;必须显式添加独立项{"packagist.org": false}于私有源之后、数组末尾,并删除composer.lock和vendor以确保配置生效。

repositories数组顺序就是实际优先级
Composer 没有“优先级配置项”,所谓优先级完全由 repositories 数组中对象的书写顺序决定:从上到下依次发起元数据请求,第一个返回 HTTP 200 + 可解析 JSON 的源即被锁定使用,后续所有源彻底跳过。这不是 fallback,是硬性短路逻辑。
- 把最稳定、同步最快的镜像(如
https://mirrors.aliyun.com/composer/)放在数组首位 - 私有 Composer 仓库(
type: "composer")必须放最前,否则同名包会被公共镜像覆盖 -
type: "vcs"源(如 GitLab 地址)不参与全局元数据匹配,只对composer require vendor/name显式调用生效,所以它不和镜像抢顺序,但也不能靠它覆盖laravel/framework这类基础包 - 运行
composer config repositories查看当前真实生效顺序,别依赖注释或记忆
必须显式禁用 packagist.org 才能让镜像真正生效
默认情况下,Composer 总会把 https://packagist.org 当作隐式兜底源——哪怕你把阿里云镜像写在 repositories 第一位,只要它对某个包返回 404(比如新包尚未同步),Composer 就立刻切回官方源,看起来像“镜像没起作用”。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 禁用方式是:在
repositories数组末尾添加一个独立对象{"packagist.org": false},不是"url"字段,也不是{"type": "composer", "url": "https://packagist.org/"} - 这个对象必须是数组里的一个单独元素,不能嵌套在其他对象里,键名必须精确为
packagist.org(不是packagist或packagist.com) - 如果项目级
composer.json中定义了repositories,全局配置(~/.composer/config.json)将被完全忽略 - 验证是否生效:执行
composer config repositories,输出中不应出现https://repo.packagist.org,且应明确看到"packagist.org": false
404 是唯一触发切换的响应码
Composer 对错误的处理逻辑高度差异化:只有明确的 HTTP 404(包不存在)才会尝试下一个源;DNS 失败、连接超时(默认 30 秒)、502、500 等一律报错退出,根本不会查第二源。
- 别指望“第一个镜像慢就自动切第二个”——只要它能返回
packages.json(哪怕不含你要的包),第二个镜像就永远不会被访问 - 生产环境堆砌多个镜像源不提升可用性,反而增加不可控延迟;加第二个镜像只在一种场景有用:第一个镜像明确返回 404,且你确认该包确实在第二个镜像中存在(例如同步延迟刚过去)
- 自建镜像必须提供完整索引路径(如
/packages.json、/p/vendor/name.json),并启用providers索引,否则 Composer 不知道你支持哪些包 - 用
curl -I https://mirrors.aliyun.com/composer/packages.json验证是否返回 200 和合法 JSON,别只看 URL 能打开
换镜像后必须删 vendor 和 composer.lock
旧 composer.lock 文件里记录的是源地址哈希,不删它,即使改了 repositories,composer install 仍会按 lock 文件里的旧源地址拉取,镜像配置形同虚设。
- 执行前先删掉
vendor/目录和composer.lock - 再运行
composer install或composer update,确保元数据和 dist 包都走新源 - 如果用了
composer create-project初始化,同样要清理后再重装 - 私有源若用
type: "package",需手动补全autoload、dist等字段,否则composer install会静默跳过
composer.lock 还锁着旧源。

















