composer install 不重装包是因为默认依据 composer.lock 文件安装,即使 vendor 被删除也仅复原锁文件记录的版本;彻底重装需同时删除 vendor/ 和 composer.lock,再运行 composer install。

composer install 为什么没重装包
因为 composer install 默认只按 composer.lock 安装,哪怕 vendor/ 已删光,它也只“复原”锁文件记录的版本,不会查 composer.json 里写的最新约束。想“强制刷新”,本质是绕过 lock 文件或让它失效。
彻底清空并重装所有依赖的正确步骤
不是删 vendor/ 就够了,composer.lock 是关键干扰项。必须连带清除,再触发全新解析:
- 删掉
vendor/目录和composer.lock文件(两个都得动) - 运行
composer install—— 这时它发现没有 lock 文件,会重新读composer.json、解析依赖树、生成新 lock、再安装 - 如果想确保用最新兼容版本(比如
"^2.0"现在能装到2.5.1),这步比update更干净,因为不继承旧 lock 的版本锚点
composer update 和强制重装的区别在哪
composer update 仍基于现有 composer.lock 做增量更新:它会保留已锁定的间接依赖版本,只升级你显式声明的包(或全部,取决于参数)。容易误以为“全更新了”,其实很多子依赖纹丝不动。
- 想升级某个包及其全部子依赖?用
composer update vendor/package-name --with-all-dependencies - 想让所有包都按当前
composer.json约束重新选最新兼容版?必须先删composer.lock,再install -
update可能因网络或 repo 状态失败后留下半截 lock,而删 lock + install 更可预测
常见翻车现场:缓存、权限、PHP 版本错位
即使步骤对了,也可能卡在奇怪的地方:
- 本地 Composer 缓存坏了?加
--no-cache参数试试:composer install --no-cache - 报错
Could not delete ... vendor/autoload.php?Windows 下杀不掉进程,手动关掉 IDE 或终端里的 PHP 进程,或换 PowerShell 执行 - 新装的包跑不起来?检查
composer.json里"platform"配置是否锁死了 PHP 版本,导致实际环境不匹配 - CI/CD 中频繁失败?别用
update,统一走「删 lock + install」流程,避免不同机器上解析出不同依赖树
真正麻烦的从来不是命令本身,而是 lock 文件像幽灵一样潜伏在 Git 忽略列表外、被 IDE 自动恢复、或者团队成员混用 install 和 update 导致 lock 不一致 —— 这些地方一松懈,问题就藏得特别深。










