composer update 不刷新包缓存,仅重算依赖并更新 composer.lock;包缓存由 Composer 自动管理,是否下载新包取决于远程 URL 和校验值是否变更,与 update 命令无关。

composer update 不更新“缓存”,它只重算依赖并写入 composer.lock;所谓“包缓存”实际由 Composer 自身维护,与 update 命令无关。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer update 会触发下载,但不等于刷新包缓存
很多人误以为 composer update 会清掉或重载本地包缓存(比如 ~/.composer/cache 下的 zip 或 dist 文件),其实不会。Composer 在执行 update 时:
- 先读 composer.json,丢弃当前 composer.lock
- 重新解析整个依赖图,向 Packagist 查询满足约束的最新版本元数据
- 若发现某个包的远程 ZIP URL 或 SHA256 校验值变了,才会去下载新包(此时可能复用已有缓存,也可能跳过)
- 缓存是否命中,完全取决于 URL 和校验值是否一致,不是命令控制的
真正影响包缓存行为的是 --no-cache 和 --prefer-dist
如果你怀疑缓存损坏导致下载失败、校验失败或装了旧包,可显式干预缓存逻辑:
- composer update --no-cache:跳过所有本地缓存,强制从远程拉取元数据和 ZIP 包(适合调试 404 或 hash mismatch 错误)
- composer update --prefer-dist:优先用 ZIP 包(缓存友好),而非 --prefer-source(克隆 Git,不走缓存)
- 注意:--no-cache 不会删除缓存目录,只是本次忽略它;要清空缓存得用 composer clear-cache
常见错误现象:update 后 vendor 里还是旧代码
这通常不是缓存问题,而是以下情况之一:
- composer.json 中该包的版本约束太宽(如 "monolog/monolog": "*"),但 Packagist 上最新版被标记为 unstable,而你没配 "minimum-stability": "dev"
- 包被其他顶层依赖通过 replace 或 conflict 隐式锁定(composer show monolog/monolog 可查实际安装版本及来源)
- 本地 Git 仓库有未 push 的 tag,Packagist 还没同步,导致 composer update 查不到新版本
- 执行了 composer update monolog/monolog,但拼写错误(如多空格、引号包裹),实际执行的是无参数的裸 composer update,结果全量重算却没改到目标包
需要强制刷新包缓存?用 clear-cache 而非 update
当遇到这些情况时,composer update 本身无能为力,必须换命令:
- composer clear-cache:清空 ~/.composer/cache 下所有元数据、ZIP、GIT 克隆缓存
- 清完后首次 composer update 会变慢(因为全量重下),但能排除缓存污染干扰
- 如果只想清某包缓存,没有官方支持方式;可手动删 ~/.composer/cache/files/vendor/package-name/ 对应子目录(注意路径大小写)
- CI 环境建议在 install/update 前加 composer clear-cache,避免共享 runner 的缓存污染
真正容易被忽略的是:Composer 的“缓存”是透明的、被动的,它不参与依赖求解逻辑,也不记录哪些包该升不该升——那全是 composer.lock 和 composer.json 的事。别指望 update 帮你管理缓存,它连自己的缓存目录路径都不暴露给你配置。

















