真正重装依赖需同步清理vendor/、composer.lock和缓存,并加--no-cache参数,否则Composer仍按lock文件哈希复用旧ZIP或跳过下载。

直接运行 composer clear-cache 不足以触发真正的“重新初始化依赖”;必须同步清理 vendor/、composer.lock 和缓存三者,并加 --no-cache 参数,否则 Composer 仍会复用旧 ZIP 或锁文件中的哈希值。
为什么 composer clear-cache 后 composer install 还是飞快?
因为 composer install 的语义是“按 composer.lock 还原”,哪怕 vendor/ 是空的,它也会从 ~/.composer/cache/files/ 解压已缓存的 ZIP——这根本不是重装,只是复原。你删了缓存但没删 composer.lock,Composer 就照着旧哈希去旧路径找文件,连网络请求都不发。
-
composer.lock没删 → 一定走还原逻辑,不重新解析依赖 -
cache/files/没清干净 → 可能复用损坏或过期的 ZIP(比如Corrupted zip file: monolog/monolog) - 没加
--no-cache→ 即使缓存目录为空,Composer 仍可能跳过下载,直接报Invalid zip file
真正重装依赖的三步命令(Linux/macOS)
以下操作切断全部缓存路径,确保每个包都真实拉取、校验、安装:
-
rm -rf vendor composer.lock—— 删除已安装产物和锁定依据 -
composer clear-cache—— 清空本地缓存(含repo/、files/、vcs/) -
composer install --no-cache --prefer-dist --optimize-autoloader --no-dev——--no-cache是关键,禁用本次所有缓存查找;--prefer-dist避免 git clone 开销
Windows 用户注意文件占用和路径写法
PowerShell 下需显式处理路径和权限问题:
- 先关掉 PhpStorm、VS Code 或 Xdebug,否则
Remove-Item可能因文件被占用而失败 - 执行:
Remove-Item -Recurse -Force vendor, composer.lock - 确认缓存路径:
composer config --global cache-dir,通常为%APPDATA%\Composer\Cache - 清理后跑:
composer install --no-cache --prefer-dist --optimize-autoloader --no-dev
容易被忽略的元数据残留点
即使上述步骤都做了,若仍拉不到新版包(比如私有仓库更新后 composer update 没反应),要额外清理三处:
-
rm -rf $(composer config --global cache-dir)/repo/https---packagist.org/—— 删 Packagist 元数据快照 -
rm -f vendor/composer/installed.json—— 该文件缓存当前已装包的精确版本,影响composer show输出 - 验证是否生效:
composer update --dry-run -v,观察日志中是否出现Downloading https://...而非Using cache











