“nothing to install or update”信号表明composer未发起远程请求,仅依据本地过期的packages.json缓存计算依赖;根本原因是默认复用15分钟内未过期的元数据,即使镜像站已同步新版本(如monolog/monolog v3.6.0),它仍按旧索引判定无更新。

根本原因不是镜像“没同步”,而是 Composer 默认复用本地缓存的 packages.json —— 它根本没去镜像站查新,就直接按旧索引算依赖。
composer update 显示 “Nothing to install or update” 是什么信号?
这不是命令失效,是 Composer 在本地缓存里查了一遍,发现当前元数据中没有满足你版本约束的新版本。它甚至没发一次 HTTP 请求。
- 现象:Packagist 页面已显示
monolog/monolog发布了v3.6.0,但composer update monolog/monolog无任何下载行为,只输出这句 - 本质:
~/.composer/cache/repo/https---mirrors.aliyun.com-composer/packages.json还是 20 分钟前的旧文件,里面压根没v3.6.0 - 注意:
composer clear-cache会清掉这个文件,但下次update仍可能立刻重建并复用——除非你主动打断缓存逻辑
怎么让 Composer 真正去镜像站拉最新元数据?
必须强制丢弃旧元数据,且确保请求发到你配的镜像地址,而不是 packagist.org。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(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和provider-*.json,不碰 ZIP 缓存,快且精准 - Composer rm -rf ~/.composer/cache/repo/https---mirrors.aliyun.com-composer
- 执行后立刻跟一句
composer update vendor/package-name,终端必须出现Downloading https://mirrors.aliyun.com/composer/...才算生效 - 验证镜像是否真被使用:
composer config -g repo.packagist输出必须是完整 JSON,含"type": "composer"和正确 HTTPS 地址
为什么改了全局镜像,composer update 还是走官方源?
项目级 repositories 配置优先级高于全局,一旦存在,就会完全屏蔽 composer config -g repo.packagist 的设置。
- 检查方式:
composer config repo.packagist(不带-g);若返回空或错误 URL,说明项目composer.json里写了"repositories"字段 - 常见坑:模板里残留过期镜像地址,如
"https://packagist.phpcomposer.com"(已停用),或漏写/composer/后缀 - 安全修改法:用命令注入而非手编,避免结构错乱:
composer config repos.packagist composer https://mirrors.aliyun.com/composer/ - 验证是否覆盖成功:
composer diagnose中 “Repo:” 行域名必须匹配你设的镜像
如何确认镜像站本身是否已同步新包?
别等、别猜,直接查镜像 API 返回的元数据内容和时间戳。
- 查 Last-Modified:
curl -I https://mirrors.aliyun.com/composer/p2/vendor/package-name.json | grep Last-Modified,时间距现在超过 15 分钟基本可判定滞后 - 比对版本列表:
curl -s https://mirrors.aliyun.com/composer/p2/vendor/package-name.json | jq -r '.packages."vendor/package-name" | keys[]' | sort,与官方源结果对比 - 看同步日志(阿里云):
curl -s https://mirrors.aliyun.com/composer/last_sync_time,返回时间戳早于当前 2 小时以上即不可信 - 临时切回官方源验证:
composer config --unset repos.packagist,再跑composer show -a vendor/package-name,能列出新版本就坐实是镜像问题
真正卡住的从来不是网络或命令,而是元数据缓存那层“看不见的墙”。每次怀疑镜像不同步,先盯住 composer update -vvv 日志里的 Downloading 域名和 composer show -a 的实际输出,其他都是干扰项。










