composer install仅校验composer.lock中各包dist.sha256与对应zip/tar包解压前的sha-256值是否一致,不匹配即中断;不校验gpg签名、已安装vendor文件或source类型包,且镜像篡改哈希时校验仍“成功”。

composer install 时自动校验哪些哈希值?
它只校验 composer.lock 中每个包的 dist.sha256 字段,与你本地刚下载下来的 ZIP/TAR 包(解压前)的 SHA-256 值是否一致。不匹配就直接中断,报 Signature mismatch 或 package is corrupted。这不是 GPG 签名验证,也不检查 vendor 目录里已安装文件的哈希——只在校验下载包那一刻发生。
为什么改了 lock 文件里的 shasum 却没报错?
常见原因有三个:
- 用了缓存:Composer 从
~/.composer/cache直接复用旧包,跳过了重新下载和校验环节 - 该包是
"type": "git"或--prefer-source安装的,根本没走 dist 流程,dist.sha256字段为空,校验被跳过 - 镜像源替换了原始 dist 包但保留了原哈希值(比如阿里云镜像未同步元数据),校验“通过”但内容已非作者发布
如何确认当前校验是否真在生效?
最可靠的方式是加 -vvv 参数运行:
composer install -vvv
观察输出中是否有类似这样的行:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
Downloading https://mirrors.aliyun.com/composer/dist/overtrue/wechat/overtrue-wechat-5.0.0.0-zip-fea7b3d1f8.zip
然后立刻检查该包在 composer.lock 里的 dist.sha256 值,再手动下载那个 ZIP 文件,用 shasum -a 256 算一次哈希——两者必须完全一致才算真正校验通过。别信配置、别信锁文件字段位置,只信这三者对齐:日志 URL + lock 里的 shasum + 实际下载包哈希。
校验失败后不能只清缓存
composer clear-cache 只删 ~/.composer/cache,不影响 composer.lock 里硬编码的旧哈希。真正有效的修复必须同步清理:
-
rm -rf vendor composer.lock(Windows 用rd /s /q vendor & del composer.lock) composer clear-cache- 切回官方源重装:
composer config -g --unset repos.packagist.org,再跑composer install
否则哪怕换镜像、清缓存、删 vendor,只要 composer.lock 还在,校验就永远拿旧哈希去比新包——必然失败。










