Composer中文镜像存在5–15分钟延迟,因依赖定时轮询而非实时推送;元数据分packages.json(全量索引)和provider-*.json(分片版本映射),后者缺失会导致404错误;本地缓存复用是更新失败主因,需用composer update --refresh强制刷新。

Composer中文镜像不是实时同步,5–15分钟是常态延迟
镜像站不会在你发布新包的下一秒就拉取,主流源(阿里云、腾讯云、清华源)靠定时轮询 https://packagist.org/packages/list.json 或增量接口触发更新,实际延迟通常为 2–10 分钟。新发布的 dev-main 分支或刚打的 git tag 版本,首波常漏掉,得等下一轮轮询或手动触发。
这不是“镜像慢”,而是设计使然:Packagist 不提供 webhook 推送,所有镜像都只能被动轮询。如果你刚 push 一个 tag 就跑 composer update,大概率失败——不是你命令错,是镜像还没来得及收录。
packages.json 是全量索引,provider-*.json 才是分片元数据
Composer Metadata V2 把元数据拆成两层:packages.json(全量 vendor 列表 + provider 模板路径)和大量 provider-*.json(按哈希分片的包版本映射)。每次 composer update 都会先 GET packages.json,再并发请求它列出的所有 provider-*.json URL。
关键点在于:packages.json 每小时或每天生成一次,但某个 provider-*.json 文件如果镜像没同步上,就会返回 404,导致命令卡住或报 Could not fetch packages.json —— 实际是某一片缺失,不是整个源崩了。
- 验证是否滞后?别只看
packages.json,直接访问镜像的对应 provider 地址,比如https://mirrors.aliyun.com/composer/p2/laravel/framework/10.0.0.json -
provider-*.json不缓存,每次update都重拉,所以镜像延迟直接影响命令耗时
本地缓存和 Composer 元数据复用才是“更新不到”的主因
composer clear-cache 只清 ZIP/tar 包缓存,不碰 ~/.composer/cache/repo/ 下的 packages.json 和 provider 索引。Composer 默认 15 分钟内复用本地元数据,哪怕镜像已更新也不会重拉。
真正生效的刷新方式取决于版本:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Composer ≥ 2.5:
composer update --refresh强制丢弃所有缓存的packages.json,从当前镜像源重拉最新索引 - Composer rm -rf $(composer config --global cache-dir)/repo/https---mirrors-aliyun-com-composer
- 临时调试加
--no-cache -v,看终端输出的真实请求 URL 是否命中你配的镜像地址
换源后仍装不到最新版?先确认配置真生效、再查 provider 是否存在
很多人改完配置就跑命令,结果还是走官方源——因为 repo.packagist 键名写成 repos.packagist(多一个 s)、漏掉 composer type 值、URL 末尾缺 /,三者任一出错都会静默 fallback,且不报错。
验证是否生效,唯一可靠方式是运行:
composer config -g repo.packagist
输出必须是完整 JSON 对象,如 {"type": "composer", "url": "https://mirrors.tuna.tsinghua.edu.cn/composer/"}。空、null、只返回字符串,都说明没配成功。
项目级配置优先级高于全局,如果项目 composer.json 里有 "repositories" 字段,它会完全屏蔽全局设置——此时要查 composer config repo.packagist(不带 -g)。
最常被忽略的环节是:镜像同步 ≠ 你就能立刻装到新包。必须确认两点——配置写对了,且对应 provider-*.json 已被镜像拉取并可访问。否则所有命令都在原地打转。

















