彻底重装依赖必须删除 vendor 和 composer.lock 后运行 composer install;update 仅按锁文件升级,不强制重拉,易致文件残留与行为不一致。

直接删掉 vendor 和 composer.lock,再跑 composer install —— 这才是彻底重装所有依赖的可靠做法。用 composer update 不是重装,只是升级,还可能因锁文件残留导致行为不一致。
为什么 composer update 不等于重装依赖
它只更新 composer.json 中允许的版本范围,且严重依赖现有 composer.lock:已安装的包不会被强制卸载重拉,旧版本文件可能残留在 vendor 里;如果 lock 文件里记录了某个包的 v2.1.0,而你本地 vendor 里其实是 v2.0.5(比如手动改过),update 可能直接跳过它。
- 常见错误现象:
composer update后类找不到、方法不存在,但composer show vendor/package显示版本号是对的 —— 实际加载的还是旧文件 - 真正重装必须打破 lock 文件和 vendor 的耦合关系
- CI/CD 或本地环境不一致时,
update会放大差异,而不是消除
删 vendor 和 composer.lock 后该用 install 还是 update
用 composer install。它会严格按 composer.json 重建 composer.lock 并下载对应版本,确保所有机器行为一致。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 如果项目没有
composer.lock(比如刚 clone 下来),install会自动生成一份,内容基于composer.json当前约束 -
composer update此时反而危险:它会无视历史 lock,重新解析依赖图,可能拉到不符合预期的新版(比如^2.0变成3.0) - 性能影响:首次
install比update稍慢(因为没缓存可复用),但换来的是确定性
哪些情况必须连 composer.lock 一起删
当你怀疑 lock 文件本身已损坏,或想彻底回归 composer.json 的原始声明时 —— 比如换 PHP 版本后依赖不兼容、团队协作中 lock 文件被误提交了冲突解决痕迹、或者修复 “明明改了 require 却不生效” 的问题。
- 典型错误信息:
Your lock file does not contain a compatible set of packages - 删 lock 前确认
composer.json是你想要的最终状态,否则重装结果不可控 - Windows 下有时
vendor文件夹删不干净(权限/进程占用),建议用rm -rf vendor(WSL)或 PowerShell 的Remove-Item -Recurse -Force vendor
重装后要立刻验证的三件事
别以为跑完命令就结束了。实际项目里最常漏掉的是 autoload 和扩展兼容性检查。
- 运行
composer dump-autoload,尤其改过 PSR-4 映射或加了新类文件后,否则自动加载器可能还指向旧路径 - 检查
php --ini和php -m,确认所需扩展(如mbstring、curl)已启用 —— 有些包在安装时不会报错,但运行时报Class not found - 快速执行一个最小依赖调用,比如
php -r "var_dump(class_exists('GuzzleHttp\Client'));",比跑全量测试更快暴露路径或 autoloader 问题
真正的“重装”不是命令选得花哨,而是清楚每一步在打破什么、重建什么。lock 文件不是备份,是契约;vendor 不是缓存,是快照。删得干净,才装得实在。










