composer update 不走新包是因缓存未彻底清理:需组合执行 composer clear-cache、手动删除 vendor/composer/archives/、加 --no-cache 参数运行 update。

Composer update 为什么总不走新包?缓存惹的祸
Composer 的 update 命令默认会复用本地已下载的包归档(vendor/composer/archives/)和元数据缓存(~/.composer/cache/),尤其在 CI 脚本或 Docker 构建中,旧缓存可能导致拉取到过期的 dist 包或错误的版本解析结果。这不是 bug,是设计使然——但脚本里你通常要的是「完全干净、从源重来」。
脚本中强制清空所有 update 相关缓存的正确方式
别只删 vendor/ 或只跑 composer clear-cache:前者不碰元数据,后者不清理已解压的 dist 归档,两者都可能残留干扰项。
vendor/ 或只跑 composer clear-cache:前者不碰元数据,后者不清理已解压的 dist 归档,两者都可能残留干扰项。
推荐在脚本中组合执行以下三步:
- 运行
composer clear-cache—— 清掉 HTTP 响应、zip 包、repo metadata 缓存 - 手动删除
vendor/composer/archives/(如果存在)—— 这个目录由 Composer 自动管理,但不会被clear-cache触及,它存着已解包的 dist zip,下次 update 可能直接复用,跳过校验 - 加
--no-cache参数跑composer update—— 强制本次请求绕过所有缓存层(包括内存中的 repo cache),等价于临时禁用缓存
示例 shell 片段(CI 脚本常用):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer clear-cache rm -rf vendor/composer/archives/ composer update --no-cache --prefer-dist
注意 --no-cache 和 --ignore-platform-reqs 的区别
--no-cache 只影响网络请求与本地缓存读取,不影响平台兼容性检查;而 --ignore-platform-reqs 是跳过 PHP 扩展、PHP 版本等约束——这两者常被混用,但目的完全不同。
- 你要的是「干净更新」→ 用
--no-cache - 你在容器里没装 ext-mbstring 却想强行跑 update → 才需要
--ignore-platform-reqs(但这是权宜之计,不该进正式脚本) -
--no-cache不会加速首次安装,反而略慢(因为全走网络),但它确保行为可重现
Docker 构建时容易漏掉的缓存点
多阶段构建中,如果 composer install 在 build 阶段执行,而你只在 composer update 前清了 cache,却没清掉上一构建层残留的 vendor/ 或 composer.lock,结果仍是错的。
- 确保
composer update前,vendor/和composer.lock都是干净状态(比如用rm -rf vendor composer.lock) - 不要依赖 .dockerignore 忽略
vendor/来“假装干净”——Docker 构建缓存仍可能复用旧 layer - CI 中建议固定 Composer 版本(如
COMPOSER_VERSION=2.7.7),不同大版本的缓存结构有差异,混用会导致静默失效










