真重装必须删vendor、composer.lock并运行composer install --no-cache;因install默认只按lock复原,无视composer.json变更和php版本差异,且缓存、lock、vendor任一残留都会导致复用旧包。

删 vendor 和 composer.lock,再跑 composer install --no-cache,才是真重装;只删 vendor 或只跑 composer update 都不行。
为什么 composer install 不重装包?
它默认只认 composer.lock —— 即使 vendor/ 是空的,也只会原样复原锁文件里记的版本、哈希、路径。你改了 composer.json 里的版本号?它压根不看。你换了 PHP 版本?锁文件里存的是旧平台解析结果,照样照装。
常见错误现象:
- 删了
vendor/,composer install后文件时间没变,甚至校验失败(Invalid zip file) - CI 构建产物行为异常,但本地
composer install看似成功 —— 实际用了缓存里的旧 zip
删哪些文件、清哪些缓存才真正干净?
必须同时处理三层残留:
- 项目级产物:
rm -rf vendor(Windows 用Remove-Item -Recurse -Force vendor) - 决策依据:
rm composer.lock(Windows 用del composer.lock) - 全局包缓存:
composer clear-cache(查位置:运行composer config --global cache-dir)
漏掉任意一层,都可能复用旧包。比如只清缓存不删 lock,Composer 仍按旧树解析;只删 vendor 不动 lock,就等于让它“复原”而非“重装”。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
composer install --no-cache 和 composer update 到底该用哪个?
要的是“和现在 composer.json 约束一致的新安装”,不是“升级到最新版”,那就必须用 install:
-
composer install --no-cache:无lock时自动重新解析依赖树,生成新composer.lock,再下载安装 —— 行为可预测、不引入意外升级 -
composer update:基于现有lock做增量更新,会升级间接依赖,可能触发大版本变更(如 Laravel 9 → 10),线上慎用 -
composer update --lock --no-install:仅重算lock(适合换 PHP 版本后同步平台配置),但不装包,得接composer install
CI/CD 中建议统一走「删 lock + install --no-cache」流程,避免不同机器解析出不同依赖树。
Windows 下容易卡死的几个真实坑
不是命令写错,是系统级限制在捣鬼:
-
Could not delete vendor/autoload.php:IDE(PhpStorm)、调试器(Xdebug)、或后台 PHP 进程占着文件,关掉再试,或换 PowerShell 执行 -
symlink(): Operation not permitted:Windows 默认禁用符号链接,Composer 会退化为复制,但某些 bin 脚本(如phpunit)依赖 symlink,导致后续命令失败 - 删
vendor失败后直接跑install,报Permission denied:说明句柄还在,重启终端再操作
真正麻烦的从来不是命令本身,而是 composer.lock 被 IDE 自动恢复、Git 忽略不全、或团队混用 install/update 导致锁文件不一致 —— 这些地方一松懈,问题就藏得特别深。










