composer clear-cache仅清除~/.composer/cache中的ZIP包、元数据和Git克隆缓存,不阻止后续命令复用缓存;必须配合--no-cache才能强制跳过所有缓存逻辑,实现真正禁用缓存。

clear-cache 本身不阻止后续命令走缓存,必须配合 --no-cache 才真正禁用缓存逻辑。 单独跑 composer clear-cache 只是删掉 ~/.composer/cache/ 下的 ZIP、元数据和 dist 包,但下次 install 或 update 仍会立刻重建缓存并复用旧哈希——你看到的 “Using cache” 就是它在说话。
为什么 clear-cache 后还是没重下包?
因为 Composer 的缓存分两层:本地归档(downloads/)和运行时元数据(比如 packagist.org 的包列表)。clear-cache 清的是前者,但后者在命令执行时仍可能被快速命中。更关键的是:--no-cache 这个开关才是告诉 Composer “这次别查本地缓存,直接发 HTTP 请求”。
-
clear-cache是“清仓库”,--no-cache是“关门不让进”——两者缺一不可 - 删了
vendor/但没加--no-cache?它会从缓存解压旧 ZIP,根本不出网 - 加了
--no-cache但没清缓存?没问题,它本来就不读;但若之前缓存里存了损坏 ZIP,不清掉仍可能解压失败
composer install --no-cache 和 composer update --no-cache 的区别
二者都跳过缓存,但行为逻辑完全不同:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer install --no-cache:完全按composer.lock还原,只禁用缓存下载路径,不改变版本解析 -
composer update --no-cache:先绕过缓存拉取最新元数据(如 packages.json),再按composer.json约束重新计算依赖树,可能升级子依赖 - 想确保 lock 文件也不干扰?先删
composer.lock,再跑composer install --no-cache,它会生成全新 lock
CI/CD 中 --no-cache 仍失效的常见原因
流水线环境里,光靠 --no-cache 不保险,因为 runner 往往挂载了持久化缓存目录(比如 GitHub Actions 的 actions/cache),Composer 会默认继续用它。
- 最稳妥做法是双重拦截:
COMPOSER_CACHE_DIR=/dev/null composer install --no-cache - 或者用临时目录:
COMPOSER_CACHE_DIR=$(mktemp -d) composer install --no-cache - 私有仓库场景下,即使加了
--no-cache,如果auth.json里凭据失效或过期,依然卡在401 Unauthorized,不是缓存问题
真正容易被忽略的一点是:--no-cache 不影响 dist 或 source 下载策略。如果你怀疑某个包的 ZIP 已损坏,又不想切到 --prefer-source(太慢),得手动删掉缓存里对应包的 ZIP 文件(路径形如 ~/.composer/cache/files/vendor/name/xxx.zip),再跑带 --no-cache 的命令。

















