直接删掉 vendor/ 目录再跑 composer install 是唯一能真正补全丢失文件的操作——前提是 composer.lock 存在且未损坏;composer 不校验包内文件完整性,仅检查包目录是否存在,故需彻底删除整个包目录才能触发重装。

直接删掉 vendor/ 目录再跑 composer install,是唯一能真正补全丢失文件的操作——前提是 composer.lock 存在且未损坏。别指望 composer install 自动发现并修复局部缺失。
为什么 composer install 不会自动补全删掉的 src/ 或 tests/ 目录
Composer 只认“包目录是否存在”,不校验内部文件完整性。你手动删了 vendor/monolog/monolog/src/,但 vendor/monolog/monolog/ 这个目录还在,Composer 就认为“已安装”,直接跳过。
- 验证方式:运行
ls -la vendor/monolog/monolog,如果目录存在但里面空或缺关键子目录,就是典型“伪存在” - 绕过办法:必须
rm -rf vendor/monolog/monolog彻底删除整个包目录,再执行composer install - 注意:
composer update monolog/monolog不等于重装——它可能什么也不做,只因composer.lock里版本仍满足约束
如何确认 vendor 文件是否真被篡改或损坏
composer install 成功不代表文件安全。它只在校验下载的 dist 包时比对 SHA256,一旦解压落地,就不再复查。要主动验证,得用实验性命令:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先确保 Composer ≥ 2.5:
composer --version - 启用并运行:
COMPOSER_EXPERIMENTAL=1 composer verify-checksums --strict - 关键点:
--strict必须加,否则不匹配也返回成功码(CI 会误判) - 它只比对
composer.lock中dist.sha256和 vendor 下原始包文件(不含vendor/composer/autoload_*.php等生成文件)
删 vendor 后 composer install 还失败?先盯住这三个点
失败往往不是命令问题,而是环境或锁文件状态不对:
-
composer.lock被 Git 标为 modified(尤其 Windows/Linux 换行符差异),会导致解析失败;用git status确认干净 - 执行用户对项目根目录、
vendor/和~/.composer/cache没有写权限;避免用sudo启动,后续操作易权限错乱 - PHP 版本低于
composer.lock中platform.php字段值(如"php": "8.1.10"),某些 polyfill 包会选错实现,导致类找不到
最常被忽略的是:verify-checksums 不报具体哪个文件不一致,只说“Checksum mismatch”。真要定位,得手动进 vendor/package 目录,用 find . -type f ! -path './tests/*' -print0 | sort -z | xargs -0 sha256sum | sha256sum 计算整体哈希,再和 composer.lock 里对应字段比对——这步没法省。










