答案是composer默认复用15分钟内未过期的本地packages.json缓存,跳过远程校验;解决需用composer update --refresh(≥2.5)强制刷新元数据,或手动删除对应repo缓存子目录。

Composer中文镜像本身不产生版本不一致,但会放大本地缓存与远程元数据的错位——真正卡住你的不是镜像没同步,而是 Composer 默认复用 15 分钟内未过期的 packages.json 缓存,跳过网络校验。
composer update 显示 “Nothing to install or update” 却有新版本
这不是镜像延迟,是本地缓存没刷新。Composer 启动时直接读 ~/.composer/cache/repo/https---mirrors-aliyun-com-composer/packages.json,只要存在且未过期,就按旧列表算依赖。
- 先确认镜像是否真已更新:
curl -I https://mirrors.aliyun.com/composer/packages.json,看Last-Modified时间是否比你预期的新 - 执行
composer update --refresh(仅限 Composer ≥ 2.5):它只丢弃packages.json和provider-*.json,不删 ZIP 包,也不重建 lock 文件 - 老版本(≤ 2.4)必须手动删缓存子目录:
rm -rf $(composer config --global cache-dir)/repo/https---mirrors-aliyun-com-composer -
composer clear-cache无效——它清的是 dist 包和部分 provider 缓存,packages.json仍被复用
项目级 repositories 配置静默覆盖全局镜像
你在终端配了 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,但进项目一跑 composer require,日志里却出现 Downloading https://p...——大概率是项目 composer.json 里写了 "repositories" 字段,直接屏蔽了全局设置。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 运行
composer config --list | grep repositories.packagist.url,确认输出是你配置的镜像地址 - 检查项目
composer.json是否含"repositories",若有,确认 URL 是当前有效镜像(如https://mirrors.aliyun.com/composer/),不是已停更的旧地址 - 若需保留私有源,别覆盖整个
repositories数组,用composer config repo.packagist composer https://mirrors.aliyun.com/composer/(不加-g)追加
验证镜像是否真同步了你要的包
别信网页界面或 composer diag——它默认只测 packagist.org,完全不检查你配的镜像。
- 查当前生效镜像:
composer config -g repos.packagist.url(注意是复数repos,单数repo在 Composer 2.2+ 已失效) - 查全量索引是否更新:
curl -I https://mirrors.aliyun.com/composer/packages.json,必须返回HTTP/2 200 - 查具体包版本:
curl -s https://mirrors.aliyun.com/composer/p2/vendor/package-name.json | jq -r '.packages."vendor/package-name" | keys[]' | sort | tail -3 - 对比官方源输出:
curl -s https://packagist.org/p2/vendor/package-name.json | jq -r '.packages."vendor/package-name" | keys[]' | sort | tail -3,版本不一致即为同步延迟
换镜像后报 “Could not parse version constraint”
这是旧版 Composer(尤其是 1.x)解析国内镜像精简后的 packages.json 结构失败所致——阿里云、腾讯云等为加速裁剪了非必需字段(如 conflict、require-dev),而 Composer 1.10.22 等版本只认原始格式。
- 强制切回官方源:
composer config -g repo.packagist composer https://packagist.org - 清缓存:
composer clear-cache - 验证配置:
composer config -g repo.packagist必须输出{"type":"composer","url":"https://packagist.org/"} - 项目级配置更稳:
"repositories": [{"type":"composer", "url":"https://mirrors.aliyun.com/composer/"}], "packagist.org": false,且"packagist.org": false必须加,否则 fallback 到官方源
最常被忽略的点是:镜像配置是否被项目级 repositories 覆盖,以及 --refresh 是否可用——低于 Composer 2.5 就得手动删缓存子目录,而不是反复 clear-cache。










