composer install 默认不下载是因为它直接从本地缓存解压并按 composer.lock 校验还原;真正重下载需同时删除 vendor 和 composer.lock,再执行 composer clear-cache && composer install --no-cache。

composer install 为什么总不真正下载?
因为 composer install 默认完全信任 composer.lock 和本地缓存(~/.composer/cache/ 或 %APPDATA%\Composer\Cache\),它根本不会发 HTTP 请求,而是直接从缓存解压 ZIP 包,再按 lock 文件里的哈希值校验还原。删了 vendor/?照样复原。清了缓存但没加 --no-cache?下次安装立刻重建并复用旧记录。
删 vendor + 删 composer.lock 是硬性前提
二者必须一起删,缺一不可:
- 只删
vendor/:Composer 仍严格按composer.lock复原,不是重装 - 只删
composer.lock:Composer 可能拒绝执行install,或报错No composer.lock file present
Linux/macOS:rm -rf vendor composer.lock
Windows(PowerShell):Remove-Item -Recurse -Force vendor, composer.lock
删 composer.lock 前务必确认已提交到 Git,否则重生成的 lock 可能和线上环境不一致。
clear-cache 和 --no-cache 必须配合使用
composer clear-cache 只是清掉 ~/.composer/cache/ 下的 ZIP、tar.gz 和元数据;--no-cache 才是告诉 Composer “这次别查缓存目录,老老实实发 HTTP 请求”。两者是互补关系,不是替代关系:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 不运行
clear-cache:--no-cache会跳过缓存查找,但网络请求可能命中 CDN 或镜像源的旧响应 - 只运行
clear-cache不加--no-cache:Composer 会在安装前自动重建缓存,并立刻复用旧哈希
正确顺序:composer clear-cache → 确认输出含 Clearing cache (all) → 紧接着 composer install --no-cache。
CI/CD 中更稳妥:COMPOSER_CACHE_DIR=/dev/null composer install --no-cache,彻底绕过缓存路径。
验证是否真重下了
终端日志里必须出现 Downloading https://api.github.com/ 或类似 URL,而不是 Using cache、Extracting archive 或 Writing lock file。如果看到 Invalid zip file, retrying 或 Hash mismatch,通常不是网络问题,而是本地缓存 ZIP 被杀毒软件扫描、编辑器预加载或挂载卷权限异常修改过——这种损坏必须靠 clear-cache + --no-cache 组合才能绕过。
真正麻烦的从来不是命令本身,而是缓存损坏后行为不一致、私有仓库凭据残留影响请求结果、或者 composer.lock 被 IDE 自动恢复却没人察觉——这些地方一松懈,问题就藏得特别深。

















