composer install 不重装包是因为它严格遵循 composer.lock 文件,即使 vendor 被删除也按锁文件版本安装;强制重装需删 lock 文件、刷新 lock 或清缓存配合删 vendor。
composer install 为什么没重新下载包
因为 composer install 默认只读取 composer.lock 文件,只要锁文件存在且没变,它就直接解压已有的 vendor 包,完全跳过远程仓库。哪怕你删了 vendor/ 目录,只要 composer.lock 还在,它依然按老版本装——这不是 bug,是设计行为。
强制重装所有包的三种可靠方式
核心逻辑:绕过 lock 文件约束,或让它失效。
-
rm -rf vendor/ composer.lock && composer install:最彻底,删锁文件+删包目录,从头生成新 lock 并安装。适合想全面升级又不怕兼容风险的场景 -
composer update --lock:不改composer.json也能刷新 lock 文件(比如远程包有 patch 版本更新但未 bump minor),再跑composer install就会拉新包 -
composer install --no-cache:仅禁用本地缓存,不影响 lock 行为;真正起效需配合composer clear-cache+ 删除vendor/,否则还是走 lock
composer update 和 install 的关键区别
composer update 会根据 composer.json 重新解析依赖树、写入新 composer.lock,并安装对应版本;composer install 只认 composer.lock,不看 composer.json 的版本范围变动。所以: