composer install 的本质是按 composer.lock 复原而非重装;删 vendor 前需明确目标:保留 lock 则还原锁定状态,删 lock 才重新解析依赖;换 PHP 版本后须删 lock 避免平台约束导致错误;清缓存需三步并行并验证;--no-cache 是唯一强制重拉方式;失败后应先 --dry-run 判断 vendor 可信度。

删 vendor 之前先确认 composer.lock 是否要保留
composer install 的本质是“按 composer.lock 复原”,不是重装。如果 composer.lock 没变,哪怕你删了整个 vendor/,它也只会从缓存或本地 ZIP 解压——不会走网络,也不会校验远程最新哈希。
所以第一步得想清楚:你是想“还原当前锁定状态”,还是“重新解析依赖树”?
- 还原锁定状态 → 只删
vendor/,留composer.lock,再跑composer install - 重新解析版本 → 必须删掉
composer.lock,否则composer install根本不看composer.json里的新版本号 - 换 PHP 版本后仍用旧 lock → 可能因平台约束(如
"platform": {"php": "8.1"})导致装错扩展,此时必须删 lock
清缓存不能只靠 composer clear-cache
composer clear-cache 默认只清 ~/.composer/cache/repo/ 和 files/ 下的 HTTP 缓存,但有时 downloads/ 子目录残留损坏 ZIP,或权限问题让清理失败。
安全做法是三步并行:
- 运行
composer clear-cache - 手动进缓存目录:
cd $(composer config cache-dir),确认downloads/和files/为空 - 若曾用过私有源或自定义镜像,额外清
repo/下对应域名缓存(如rm -rf repo/https---mirrors.aliyun.com-composer-)
清理后跑 composer install -v,看到 Downloading 而非 Using cache 才算真正生效。
composer install --no-cache 是强制重拉的关键参数
--no-cache 不是“跳过缓存”,而是本次执行彻底禁用所有缓存路径:不查本地 ZIP、不读 repo 缓存、不复用已解压文件。这是唯一能确保每个包都真实走网络 + 校验 + 解压的方式。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
搭配使用更稳妥:
-
--prefer-dist:避免触发 git clone(尤其对没提供 dist 的包,此参数会失效) -
--optimize-autoloader:重建 classmap 加速加载,不是缓存相关但常被一起加 -
--no-dev:跳过开发依赖,大幅缩短安装时间,CI 场景推荐
注意:--retries=5 对 TLS 握手卡死无效,国内用户优先换镜像源而非堆重试次数。
中断后别盲目重试,先用 composer install --dry-run
网络中断、Ctrl+C 或磁盘满导致安装失败后,vendor/ 可能残留破损 ZIP、空目录或不完整 installed.json。此时直接重跑 composer install 很大概率报 Failed to extract 或 Invalid zip file。
正确姿势是:
- 先跑
composer install --dry-run - 若输出大量
Skipped→ 当前vendor/结构可信,可安全重试 - 若出现
Installing或报错 → 说明元数据已坏,需清理vendor/autoload.php和vendor/composer/目录,再composer dump-autoload,最后重装
真正麻烦的从来不是“要不要重装”,而是“当前 vendor 是否还值得信任”——--dry-run 的输出里,Skipped 是唯一可信信号。

















