删了 vendor 目录可用 composer install 原样重建,前提是 composer.lock 存在;它按 lock 文件精确安装版本以保证环境一致,而 composer.update 会忽略 lock 导致版本漂移。

删了 vendor 目录不用怕,composer install 就能原样重建,但前提是 composer.lock 文件还在。
为什么 composer install 而不是 composer update
因为 composer.lock 记录了所有包的确切版本和哈希值,composer install 会严格按它来装——保证和上次部署、别人本地、CI 环境完全一致。composer update 则会忽略 lock,重新解析依赖树,可能升到新版本,引入兼容性问题或意外行为。
- ✅ 正确做法:
composer install(有composer.lock时) - ❌ 避免:
composer update,除非你明确想升级依赖 - ⚠️ 如果
composer.lock也丢了,只能靠composer.json重装,但结果不可控——版本、子依赖、甚至 PHP 扩展要求都可能漂移
执行前必须检查的三件事
跳过这些检查,大概率卡在半路或装错东西。
- 确认当前目录下有
composer.json和composer.lock(用ls -la或资源管理器看) - 检查 PHP 版本是否满足
composer.json中"php"的最低要求(比如"^8.1"),不匹配会报Your requirements could not be resolved - 确认已安装必要扩展,如
openssl、mbstring、json(php -m | grep -E "openssl|mbstring|json")
常见失败现象和对应解法
遇到报错别急着重试,先看是不是下面这几个高频原因:
-
Could not find a version of package xxx matching your minimum-stability:项目里设了"minimum-stability": "stable",但某个包只发布了dev版。临时加--prefer-lowest或改composer.json的稳定性设置 -
Failed to download xxx: file could not be downloaded (HTTP 404):镜像源挂了或配置错误。运行composer config -g repo.packagist composer https://packagist.org恢复官方源 -
Class not found仍存在:说明自动加载没刷新。补一句composer dump-autoload(尤其改过autoload配置后)
最麻烦的情况是 composer.lock 和 composer.json 不一致,或者团队成员用了不同版本的 Composer。这时候重建出来的 vendor 表面能跑,但某天 CI 就会突然失败——因为 lock 文件本身已经“脏”了。










