项目级 repositories 字段存在即完全覆盖全局配置,哪怕值为空数组[],也会彻底丢弃 ~/.composer/config.json 中所有仓库配置;必须用 repositories.packagist.org(复数+org)设全局镜像,且需验证 config repositories 输出与 -vvv 日志一致。

项目级 repositories 完全覆盖全局配置
只要项目根目录 composer.json 里存在 "repositories" 字段(哪怕值是空数组 []),Composer 就会彻底丢弃全局 ~/.composer/config.json 中的所有仓库配置——不是合并,不是追加,是直接替换。你运行 composer config -g repo.packagist 看到镜像地址,不代表它在当前项目生效。
验证方式很简单:composer config repositories 输出什么,就是实际生效的源列表。如果输出里还有 https://repo.packagist.org,说明项目配置没写对,或者根本没声明 repositories 字段。
- 全局命令必须用
repos.packagist.org(注意复数 +.org),写成repo.packagist或repository都无效 - 全局只能设一个 Packagist 替代源,反复执行
composer config -g repos.packagist.org https://xxx只会覆盖,不会叠加多个镜像 - 私有源、VCS 源等类型不支持全局配置,必须写进项目
composer.json
repositories 数组顺序 = 实际查找顺序
Composer 查包时,对 repositories 数组从索引 0 开始线性扫描,但不是“挨个发请求等超时”,而是先检查每个源的元数据是否声明支持目标包(比如 packages 字段含该包,或 provider-includes 覆盖该包)。只有声明支持的源,才会被发起真实 HTTP 请求;没声明,哪怕 URL 可访问也直接跳过。
常见错误:把 https://repo.packagist.org/ 和镜像 URL 同时写进数组,且没禁用默认源——结果总是先连原站,一断网就卡死在 Could not fetch https://packagist.org/packages.json,镜像根本没机会被访问。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 私有 Satis 源必须生成
provider-includes,否则每次拉全量packages.json,体积大、解析慢 - 两个私有源都声明支持
monolog/monolog,Composer 只取第一个返回有效 JSON 的,后一个完全忽略 - 数组里混写官方源和镜像 URL 是危险操作,前者会抢在镜像前触发网络请求
"packagist.org": false 必须是独立哨兵项
{"packagist.org": false} 不是开关,也不是全局禁用配置项,而是 repositories 数组里的一个特殊终止符:它只在被遍历到时起作用,告诉 Composer “别再隐式兜底了”。如果把它放在私有源前面,Composer 查完私有源后立刻碰到它,判定“无源可用”,直接报错退出。
必须满足三个硬性条件才能生效:
- 必须作为
repositories数组里的独立对象项,不能嵌套进其他仓库定义里(比如不能写成{"type":"composer","url":"","packagist.org":false}) - 键名必须精确为
"packagist.org",写成"packagist"或"packagist.com"都无效 - 必须放在私有源之后、数组末尾;禁用后若还需公共包,得手动加回官方源,并确保排在它之后
换源后仍连 packagist.org?三处必须一致才可信
别信命令回显,要看真实行为。必须同时满足以下三点,才算镜像真正启用:
-
composer config -g repo.packagist或composer config -g repositories.packagist.org输出完整 JSON,例如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} -
composer config repositories输出中不含https://repo.packagist.org,且明确看到"packagist.org": false -
composer install -vvv日志里出现镜像域名(如mirrors.aliyun.com),而不是repo.packagist.org
换源后卡在 Loading composer repositories,大概率是因为缓存或旧 composer.lock 还在用原地址哈希。必须先 composer clear-cache,再删掉 vendor/ 和 composer.lock,最后重装。










