删了 vendor 目录可一键恢复,因 composer.lock 精确记录所有依赖及版本,运行 composer install 即可完全复现;若 lock 文件丢失则需 composer update,结果不可控。

删了 vendor 目录不用慌,只要 composer.json 和 composer.lock 都在,恢复就是一条命令的事。
为什么删了 vendor 也能一键恢复?
Composer 的依赖关系和精确版本都记录在 composer.lock 文件里。只要它没丢,composer install 就能按锁文件逐个还原所有包及其嵌套依赖,包括校验哈希、选择镜像源、处理 autoload 规则——完全复现上次安装状态。
-
composer.json缺失?还能靠composer.lock恢复基础依赖结构(但无法新增或修改包) -
composer.lock缺失?composer install会报错,此时只能用composer update,但结果不可控(可能升级到不兼容版本) - 本地有自定义配置(如
config.repo.packagist)?确保composer.json中已保存,否则需手动补全
composer install 和 composer update 到底该用哪个?
99% 的情况该用 composer install —— 它读取 composer.lock,严格还原,速度快、可预测、适合部署和协作。
- 用
composer install:适用于vendor被删、CI 构建、新同事拉代码后首次安装 - 用
composer update:仅当你明确要升级依赖(比如修复安全漏洞、引入新功能),且接受版本漂移风险 - 加
--no-dev参数?线上环境建议加上,跳过require-dev包,减少体积和攻击面
常见恢复失败原因和应对
执行 composer install 卡住或报错,往往不是命令问题,而是环境或配置异常。
- 报错
Could not find package xxx?检查是否误删了composer.json或写错包名;也可能是私有仓库未配置认证(如 GitHub Token、GitLab CI 变量未注入) - 提示
Failed to download xxx: file could not be downloaded?国内用户大概率是源没切好,先运行composer config -g repo.packagist composer https://packagist.phpcomposer.com(或阿里云镜像) - PHP 版本不匹配?
composer install会检查composer.json中的"php": "^8.1"等约束,用php -v确认当前版本达标 - 权限错误(如
mkdir(): Permission denied)?别用sudo composer install,改用当前用户拥有写权限的目录,或修复vendor/父目录属主
真正麻烦的不是删了 vendor,而是删完还顺手 git commit -am "clean up" 把 composer.lock 也推上去了——那恢复就真得靠记忆或备份了。










