直接运行 composer install 就能恢复 vendor/,因为 Composer 采用声明式依赖管理,install 严格按 composer.lock 恢复精确版本,保证环境一致性;reinstall 命令不存在。

直接运行 composer install 就能恢复 vendor/,composer reinstall 并不存在 —— Composer 官方没有这个命令,强行执行会报错 Command "reinstall" is not defined.。
为什么没有 composer reinstall?
Composer 的设计逻辑是「声明式依赖管理」:你只维护 composer.json 和(可选的)composer.lock,所有安装行为都基于这两个文件推导。所谓“重装”,本质就是重新解析并下载依赖,对应的标准命令只有 install 和 update:
-
composer install:严格按composer.lock恢复依赖(推荐用于已有项目、CI 环境或vendor/被删后修复) -
composer update:忽略lock,重新解析composer.json并升级到最新兼容版本(会改写lock,不适用于单纯恢复)
误删 vendor/ 后的正确恢复步骤
确保当前目录下有有效的 composer.json(且最好有未被修改的 composer.lock),然后执行:
composer install
常见情况与应对:
- 如果提示
No composer.lock file present. Updating dependencies...:说明lock文件也丢了,此时install会退化为update行为,可能导致版本漂移 —— 建议先从 Git 恢复composer.lock:git checkout -- composer.lock - 如果网络受限或镜像失效,加
-vvv查看卡在哪个包,再用composer config repo.packagist composer https://packagist.phpcomposer.com(或其他可信镜像)临时切换源 - 若项目含私有包,确认
auth.json仍在COMPOSER_HOME或项目根目录,否则会因认证失败中断
composer install 和 composer update 的关键区别
二者输出看起来相似,但底层逻辑和结果差异很大:
-
composer install读取composer.lock中记录的精确版本号(如"monolog/monolog": "2.9.1"),下载完全一致的 ZIP 包哈希,保证多人环境一致性 -
composer update重新运行依赖求解器,可能把"^2.8"解析成2.10.0,甚至触发次要版本不兼容变更 - CI/CD 流水线中必须用
install;本地开发想尝新才用update
真正容易被忽略的是 composer.lock 的作用 —— 它不是缓存,而是锁定依据。一旦丢失,就等于放弃了可重现性保障。










