真正重装依赖需三步:删 vendor/、清缓存、用 composer install --no-cache --prefer-dist --optimize-autoloader --no-dev;缓存路径受 composer_cache_dir 影响,vcs/ 目录需手动清理,sat 卡死应查约束冲突而非清缓存。

缓存清理 ≠ 重装依赖,盲目清完就跑 composer install 很可能白忙一场,甚至触发版本漂移或 autoload 错乱。真正要重来,必须切断所有缓存路径、同步锁文件与磁盘状态。
缓存到底占多少空间?先确认路径和大小
很多人执行 composer clear-cache 后发现磁盘没变化,根本原因是删错了位置。Composer 实际用的缓存路径可能被 COMPOSER_CACHE_DIR 环境变量或公司镜像覆盖,~/.composer/cache(Linux/macOS)或 %APPDATA%\Composer\Cache(Windows)未必是真实路径。
- 查真实路径:
composer config --global cache-dir - Linux/macOS 查大小:
du -sh $(composer config --global cache-dir) - Windows:把输出路径粘贴进资源管理器地址栏 → 右键“属性”
- 不到 200 MB 基本不用管;超 1.5 GB 且半年没碰老项目,才值得动手
-
vcs/目录默认被clear-cache跳过,但单个 Git 裸仓库常吃掉 300–800 MB,还耗尽 inode,需手动删:rm -rf ~/.composer/cache/vcs/*(Linux/macOS)或rd /s /q "%APPDATA%\Composer\Cache\vcs"(Windows)
为什么 composer clear-cache 后 install 还是慢?
清缓存只影响下次下载行为,不改变 composer.lock 的约束逻辑。如果你卡在 Resolving dependencies through SAT,说明是依赖冲突不可解,不是缓存问题。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
clear-cache后首次composer install变慢是正常的——所有包要重下、重解压,尤其含大前端资产的包(如laravel/ui) - 若仍卡在
Resolving dependencies,运行composer update -vvv --profile看停在哪一步:停在 SAT 阶段 → 是约束冲突,不是网络或缓存问题 - 此时该用
composer why-not vendor/package:version定位阻断链,而非继续清缓存 -
clear-cache不会刷新composer.lock,也不会更新镜像源元数据(TTL 通常 24 小时),所以装的还是旧版
真正重装依赖的三步到位法
仅删 vendor/ 或仅清缓存都不够,Composer 仍可能复用旧包或旧解压结果。要彻底从零开始,必须同时切断缓存、声明和锁文件三路依赖。
- 删
vendor/:rm -rf vendor/(Linux/macOS)或rmdir /s vendor(Windows) - 清全局缓存:
composer clear-cache - 强制无缓存重装:
composer install --no-cache --prefer-dist --optimize-autoloader --no-dev - 其中
--no-cache是关键——它禁用本次所有缓存查找,确保每个包都重新下载;--prefer-dist避免 git clone 开销;--no-dev跳过开发依赖,大幅缩短解析时间 - 绝对避免在未删
composer.lock的情况下仅删vendor/后跑composer update——这可能导致版本漂移,尤其锁文件里有精确哈希时
卸载包后 vendor 仍有残留?别手删目录
手动删 vendor/monolog/monolog 再删 composer.json 那行,最后跑 composer install,极容易导致 autoload 错乱或类找不到。Composer 2.2+ 的 composer remove 才是安全方式。
- 执行
composer remove monolog/monolog,它会自动:删composer.json条目、删vendor/子目录、更新composer.lock、重建 autoload 映射 - 若报 “required by another package”,说明上游包(如
symfony/http-client)显式依赖它,不能硬删,先用composer why monolog/monolog查依赖链 - 卸载后仍能加载类?运行
composer dump-autoload -o强制重建映射;再检查vendor/composer/autoload_*.php是否还有残留路径 - 删完还要人工扫代码:
grep -r "monolog" app/ config/ --include="*.php",重点查配置文件、服务提供者注册、动态class_exists()调用
最常被忽略的是:缓存路径可能被环境变量覆盖、vcs/ 目录必须手动清理、SAT 卡死必须用 why-not 定位而非反复清缓存。这些点不处理,重装只是换个方式失败。










