composer install 按 composer.lock 精确还原依赖;composer update 根据 composer.json 重新解析并升级/降级包版本。删 vendor 后仅 run install 是冷启动还原,非重装;真重装需删 vendor、clear-cache、install --no-cache。

composer install 和 composer update 的区别必须分清
很多人想“重装依赖”,其实是混淆了两个命令的语义:composer install 是按 composer.lock 精确还原依赖;composer update 才是根据 composer.json 重新解析并升级(或降级)包版本。删掉 vendor 后只跑 composer install,不是“重装”,只是冷启动还原——前提是 composer.lock 还在。
真正删除所有依赖并从头拉取的三步操作
要彻底摆脱当前 vendor 和缓存影响,得手动清理 + 强制刷新:
- 删掉整个
vendor目录:rm -rf vendor(Linux/macOS)或rmdir /s vendor(Windows cmd) - 删掉 Composer 的本地包缓存(可选但推荐):
composer clear-cache,避免因缓存损坏导致安装失败 - 用
composer install --no-cache重新生成 —— 加上--no-cache能跳过本地缓存,强制从远程仓库下载原始包,相当于“裸装”
为什么不能直接删 lock 文件再 install?
composer.lock 不是“缓存”,而是锁定文件。删掉它再跑 composer install 会报错:Composer could not find a composer.json file in /path(实际错误是 No composer.json present 或更常见的是 Could not find package ... in a version matching ...)。因为 install 默认依赖 lock 文件存在。真要丢弃 lock 并重算依赖,必须用 composer update,但它默认会升级到最新兼容版本,行为不可控。
稳妥做法是:删 vendor → 保留 composer.lock → composer install --no-cache。如果连 lock 也要重来,先确认 composer.json 已更新,再运行 composer update --lock(仅重写 lock,不改 vendor),之后再删 vendor + install。
Windows 下 PowerShell 执行 rm -rf vendor 失败怎么办
PowerShell 默认没有 rm -rf,直接执行会报错:The term 'rm' is not recognized。别硬套 Linux 命令:
- 用 CMD:进入项目目录后执行
rmdir /s /q vendor - 用 PowerShell:执行
Remove-Item -Recurse -Force vendor - 或者统一用 Composer 自带命令:
composer dump-autoload && composer install --no-cache前先手动删 vendor,更可靠
另外注意:某些 IDE(如 PHPStorm)会占用 vendor 文件夹导致删除失败,关掉项目或重启 IDE 再试。
最易被忽略的一点:Composer 的 platform 配置(比如 "ext-zip": "false")会影响依赖解析结果,删了重装也不会自动绕过。如果重装后仍提示某个扩展缺失,先检查 composer.json 里的 config.platform 是否锁死了不该锁的扩展版本。










