composer install 不重装依赖是因为它默认仅依据 composer.lock 文件精确安装,即使 vendor 为空或 composer.json 版本已改,也不会重新解析依赖树;强制重装需三步:删 composer.lock、删 vendor/、执行 composer install --no-cache。

composer install 为什么没重装依赖?
因为 composer install 默认只读 composer.lock,哪怕 vendor/ 是空的,它也只会按锁文件精确安装——不会管 composer.json 里写的版本约束有没有变,更不会重新解析依赖树。你删了 vendor/ 却没删 composer.lock,就等于告诉 Composer:“照旧装”。
- 删
vendor/后直接跑composer install→ 依然按旧 lock 安装 - 改了
composer.json的版本号但没更新 lock →install完全无视改动 - 想换 PHP 版本或平台配置?lock 文件里存的是旧平台的兼容结果,不重生成就无效
真正强制重装的三步操作
“强制重装所有依赖”本质是:扔掉旧决策(lock)、清掉旧产物(vendor)、让 Composer 从头算一遍。缺一不可。
- 删掉
composer.lock:rm composer.lock(Windows 用del composer.lock) - 删掉
vendor/:rm -rf vendor(Windows 用rmdir /s vendor) - 重新生成并安装:
composer install --no-cache(加--no-cache防本地包缓存干扰)
注意:composer update 不是等价替代——它会升级版本、改 lock 文件,而你只是想“干净重装”,不是“升级”。
缓存清理要分两层:全局 vs 项目级
Composer 缓存存在两个地方,都得清才彻底:
- 项目级缓存(影响当前命令):
composer clear-cache或加--no-cache参数 - 全局包缓存(
~/.composer/cache/或%APPDATA%\Composer\Cache\):里面存着已下载的 zip/tar 包。即使你删了 lock 和 vendor,Composer 仍可能从这里解压旧包,跳过远程校验
查缓存位置:composer config --global cache-dir;清全局缓存:composer clear-cache(这个命令其实清的就是全局缓存目录)。
PHP 版本或平台配置变更后必须重生成 lock
如果你换了 PHP 大版本(比如从 8.1 升到 8.3),或改了 config.platform.php,旧 composer.lock 里的 platform 字段和依赖解析结果就失效了。这时候光删 vendor 没用。
- 确认平台配置:
composer config platform.php(看是否匹配当前 PHP) - 强制按当前平台重解析:
composer update --lock --no-install(只更新 lock,不碰 vendor) - 再配合删 vendor +
composer install才算完整闭环
很多人卡在这一步:PHP 升级后 composer install 报 Your requirements could not be resolved,其实是 lock 文件还锁着旧平台的包版本。










