Composer换镜像后仍从packagist.org下载,主因是全局配置未生效(键名、type、URL格式三处校验失败)、元数据缓存未清(需--refresh或手动删cache/repo/)、项目级repositories覆盖全局配置,且composer.lock残留旧dist URL。

换镜像后 composer install 还是从 packagist.org 下载?不是镜像没切对,是本地缓存还在“说谎”。
为什么 composer config -g repo.packagist 设了却没生效
Composer 2.x+ 对全局镜像配置有三处硬性校验,缺一即静默 fallback 到官方源:
-
repo.packagist键名必须是单数,写成repos.packagist或packagist.org都无效 -
type值必须显式设为"composer",不能省略、不能写成"composer-type" - URL 必须以
https://开头,且末尾带/(https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌)
验证是否真生效:运行 composer config -g repo.packagist,输出应为完整 JSON 对象或纯 URL 字符串。若为空、null 或仍是 https://packagist.org,说明配置未落盘。
composer clear-cache 清不掉元数据缓存
composer clear-cache 默认只清 ZIP 包和 VCS 缓存,但关键的 packages.json 和 provider 文件仍留在 ~/.composer/cache/repo/ 下,继续被复用——这是最常被忽略的缓存层级。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Composer 默认缓存
packages.json最多 15 分钟,期间composer update不会重拉 - 要强制丢弃元数据缓存,得用
composer update --refresh(≥ 2.5)或手动删目录:rm -rf $(composer config --global cache-dir)/repo/https---mirrors-aliyun-com-composer -
--no-cache可临时绕过所有缓存,但每次请求都走网络,仅适合调试,别长期开着
项目级 repositories 配置会彻底屏蔽全局镜像
只要项目根目录 composer.json 中存在 "repositories" 字段,Composer 就完全忽略 repo.packagist 全局配置——哪怕你只写了空数组 {},它也会按“无主源”逻辑 fallback 到官方源。
- 检查当前项目是否覆盖了源:运行
composer config repo.packagist(不带-g),看输出是否为空或指向错误地址 - 安全注入方式:在项目目录执行
composer config repo.packagist composer https://mirrors.aliyun.com/composer/,它会自动合并进repositories数组,不破坏已有私有源 - 改完必须删掉
vendor/和composer.lock,再跑composer install,否则锁文件里"dist": {"url": "...github.com..."}仍会走原始地址
镜像同步延迟 + 本地缓存 = 两层“滞后”叠加
新包发布后,你看到的“装不上”,往往不是网络问题,而是镜像同步 + Composer 缓存双重滞后造成的假象:
- 阿里云/腾讯云镜像通常 2–10 分钟同步新包,极端情况达 15–30 分钟;中科大镜像响应更快,可临时切换验证:
composer config -g repo.packagist composer https://mirrors.ustc.edu.cn/composer/ - 验证镜像是否已同步:直接访问
https://mirrors.aliyun.com/composer/p/vendor/package-name/1.2.3.json,看是否返回 200 和有效 JSON - 对比 Last-Modified:用
curl -I https://mirrors.aliyun.com/composer/packages.json和curl -I https://repo.packagist.org/packages.json,头信息时间差超过 5 分钟,说明镜像尚未更新
缓存和镜像不是“设完就快”,而是需要主动验证、主动清理、主动重建锁文件——尤其当 composer.lock 里还残留着旧 dist URL 的时候,再快的镜像也救不了。

















