索引文件半写是composer因网络中断将截断的json写入缓存,导致后续解析失败、依赖漏装;需精准删除~/.composer/cache/repo/下损坏的packages.json和provider-*.json,再clear-cache并验证镜像连通性。

索引文件半写是什么现象
Composer 卡在 Loading composer repositories 或反复报 cURL error 28、Connection refused,但 -vvv 显示停在某个 provider-*.json URL 上不动——这不是“慢”,而是 cURL 连接被中间设备静默切断后,Composer 把截断的 JSON 写进了缓存,导致后续所有操作都因解析失败而崩溃。
典型表现:vendor/composer/installed.json 文件存在但为空或只有半个 {;~/.composer/cache/repo/https---mirrors.aliyun.com-composer/ 下的 packages.json 或 provider-*.json 文件大小异常(比如只有几 KB);运行 composer install --dry-run 直接报 JSON decode error。
为什么不能靠重试自动修复
Composer 不会校验本地缓存的 JSON 完整性,它默认信任已下载的索引文件。一旦 provider-2023-07.json 被写入一半,下次运行就直接读这个残缺文件,然后报 Unexpected end of input 或静默跳过整个 provider,最终漏装依赖。
-
composer clear-cache只清files/和vcs/,默认不碰repo/目录下的索引缓存 -
--no-cache参数只跳过元数据缓存读取,但不会主动删除损坏的旧缓存 - 项目级
"repositories"配置若指向镜像源,也会复用该镜像下损坏的repo/缓存
手动清理半写索引的实操步骤
别删整个 ~/.composer/cache,精准清除污染项更安全:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先确认镜像地址:
composer config -g repo.packagist,输出应为{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 定位缓存路径:
composer config --global cache-dir,通常为~/.composer/cache - 进入索引缓存目录:
cd $(composer config --global cache-dir)/repo/https---mirrors.aliyun.com-composer/(注意 URL 中的-是转义后的/) - 删掉所有疑似损坏的 JSON:
rm -f packages.json provider-*.json(Windows 用del packages.json provider-*.json) - 再执行
composer clear-cache清掉files/和vcs/,避免 ZIP 校验冲突
完成后跑一次 composer install --no-plugins --no-scripts -vvv,观察日志是否从头拉取 packages.json 并成功解析 provider- 文件。
如何让下次同步更抗闪断
镜像源本身没提供断点续传,但你可以限制 Composer 的“冒险行为”:
- 强制禁用 provider 分片加载:
composer config -g repos.packagist.allow-provider-splitting false,让 Composer 只拉一个完整的packages.json,减少并发请求失败面 - 禁用并行下载(仅限调试):
composer config -g parallel-downloads 1,避免多个 provider 同时中断互相污染 - 换更稳定的镜像:阿里云和腾讯云目前同步延迟稳定在 5–10 分钟,清华 TUNA 镜像偶尔有 TLS 握手不稳定问题,可临时切到
https://packagist.laravel-china.org - CI/CD 中务必加
--no-cache,别依赖本地缓存,每次都是干净拉取
真正麻烦的不是缓存删不干净,而是你删完后没验证镜像连通性就重试——curl -I https://mirrors.aliyun.com/composer/packages.json 返回 200 才算真正开始下一步。










