composer update不更新新包主因是复用过期元数据,须手动清理三处:~/.composer/cache/repo/https---packagist.org/、vendor/composer/installed.json和composer.lock,并确认镜像源生效。

Composer 的 update 命令本身不“刷新缓存”,它默认复用本地元数据和锁文件;真要让 composer update 拉到最新可用版本,必须手动清理三处关键缓存,并确认镜像源生效。
为什么 composer update 总是不更新新包?
常见现象:某包已发 2.1.0 版,composer update 却只装到 2.0.3,甚至报 Nothing to install or update。这不是网络或权限问题,而是 Composer 读了过期的元数据快照,根本“不知道”有新版。
-
~/.composer/cache/repo/https---packagist.org/里存着旧的packages.json和provider-*.json,决定“有哪些包、哪些版本” -
vendor/composer/installed.json是当前已装包的快照,update会参考它做差异计算 -
composer.lock锁死了每个包的 exact version + dist.sha256,不删它,update就不会动版本
必须执行的三步清理(顺序不能错)
在终端中依次运行:
- 先清基础缓存:
composer clear-cache - 再删元数据目录:
rm -rf $(composer config --global cache-dir)/repo/https---packagist.org/(Windows 用户用%APPDATA%\Composer\Cache\repo\https---packagist.org\) - 最后删本地状态:
rm -f vendor/composer/installed.json composer.lock
做完这三步,再跑 composer update --dry-run -v,如果看到 Downloading https://packagist.org/packages.json,说明元数据真的重拉了;如果还只显示 Reading /path/to/cache/packages.json,说明第二步没清干净。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
镜像源配置影响元数据刷新效果
即使清了缓存,如果你用的是阿里云等镜像源,composer update 仍会从镜像拉 packages.json——而镜像同步有延迟(通常几分钟到几小时)。验证当前生效源:
- 查全局设置:
composer config -g repos.packagist.url - 临时切回官方源测试:
composer config -g repos.packagist.url https://packagist.org(完事后可改回)
注意:composer update 不会自动刷新 OPcache,也不会清 Laravel/ThinkPHP 的应用缓存,那是另一层事。
想每次 update 后自动清缓存?用 post-update-cmd
仅适用于开发环境,且需明确区分“Composer 缓存”和“应用缓存”:
- 在
composer.json的scripts里加:"post-update-cmd": ["composer clear-cache"]
- 若项目用 Laravel,更实用的是连带清应用缓存:
"php artisan cache:clear", "php artisan config:clear"
- 但注意:
composer clear-cache只清全局缓存,不影响vendor/下已安装内容;它不能替代删composer.lock和installed.json
真正卡住更新的,永远是那三个文件——删错一个,update 就还是原地打转。










