provider-includes是packages.json中声明provider分片文件及其sha256哈希的索引对象,不可删除或合并,否则Composer会因无法加载分片元数据而报Invalid package information或404错误。

provider-includes 是什么,为什么不能删或合并
provider-includes 是 packages.json 里的一个键,值为对象,形如 {"provider-laravel~10.0.json": {"sha256": "xxx", "source": "/p/provider-laravel~10.0.json"}}。它不是“可选配置”,而是 Packagist 元数据分片机制的核心索引——Composer 2.5+ 会按这个字段逐个请求 /p/provider-*.json 文件,加载对应包的版本列表。
常见误操作:
- 用脚本把所有
provider-*.json合并成一个大文件,再硬改provider-includes指向它 → Composer 直接报Invalid package information,因为校验逻辑依赖每个 provider 文件独立的sha256 - 镜像同步时跳过
/p/目录,只拉packages.json→ 安装某个包时卡在Downloading https://mirrors.example.com/p/provider-vendor~name.json,且无明确错误提示 - 把
provider-includes字段整个删掉 → Composer 回退到全量扫描模式(已废弃),极慢且大概率失败
哈希校验失败时怎么定位是哪个 provider 文件出问题
报错 hash mismatch in provider file 不代表所有 provider 都坏,往往只是其中一两个。直接看 Composer 日志里最后请求的那个 URL,比如:
Downloading https://mirrors.aliyun.com/composer/p/provider-symfony~polyfill-php81.json
就说明问题出在该文件。验证步骤:
- 用
curl -s https://mirrors.aliyun.com/composer/packages.json | jq -r '.provider-includes."provider-symfony~polyfill-php81.json".sha256'提取声明哈希 - 用
curl -s https://mirrors.aliyun.com/composer/p/provider-symfony~polyfill-php81.json | sha256sum计算实际哈希 - 两者不一致 → 镜像未透传或重签,必须修复该文件,不能只“重同步”整个
packages.json
注意:不同镜像对同一 provider 文件的哈希值必须完全一致,哪怕发布时间差几秒——Packagist 的签名是内容级的,不是时间戳级的。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
自建镜像时 provider-includes 的生成逻辑不能绕过
如果你在搭建私有镜像服务(比如用 composer-mirror 或自研同步器),provider-includes 不是“生成完 packages.json 就完事”的副产品,它必须满足三个硬约束:
- 每个 key 必须严格匹配上游文件名(如
provider-laravel~framework.json,不能写成laravel-framework.json) - 每个 value 的
sha256字段必须来自上游原始响应体,不能用本地计算结果替代(除非你有上游私钥并启用重签) -
source路径必须以/p/开头,且与实际 HTTP 路径完全一致(例如镜像根路径是/composer,那source就得是/p/provider-xxx.json,不能是/provider-xxx.json)
漏掉任意一条,Composer 在解析阶段就会静默跳过该 provider,导致某些包“明明存在却找不到版本”,错误要等到 composer require vendor/package 时才暴露。
CI 中 provider-includes 同步延迟导致构建失败怎么办
典型现象:CI 流水线里 composer install 突然失败,日志显示某 provider-*.json 返回 404 或空响应。这不是网络问题,是镜像同步滞后。
- 别等“过几分钟再试”——Packagist 新发布包的 provider 文件同步通常需 5–30 分钟,但 CI 构建不能等
- 临时切源最稳:用
php -d composer.repo.packagist=https://mirrors.ustc.edu.cn/composer/ composer install,中科大源同步延迟通常 - 避免全局 config:CI job 之间可能复用缓存,
composer config -g写入的配置会被继承,建议每次构建前加composer config -g --unset repos.packagist - 关键检查点:运行
curl -I https://mirrors.ustc.edu.cn/composer/p/provider-yourvendor~yourpackage.json,确认返回 200 且Content-Length > 1000,再执行 install
真正容易被忽略的是:provider 文件不是“有就行”,它必须包含你要装的那个具体版本的元数据。哪怕文件存在,若里面没列 "1.2.3" 这个版本号,Composer 依然会 fallback 到官方源去查——而这时如果网络不通或限流,就卡死。

















