校验失败是因composer.lock哈希与镜像源dist包元数据不一致;删vendor和清缓存无效,因二者均不更新lock文件;必须禁用镜像、删除vendor和composer.lock、再用--no-cache --force-checksums从官方源重装。

校验失败不是包坏了,是 Composer 在比对时发现本地 composer.lock 里记的哈希值,和镜像源实际提供的 dist 包元数据不一致——三者(lock 文件、vendor 缓存、镜像源)只要有一处没对齐,它就拒绝继续。
为什么删 vendor 和清缓存都不管用
因为 composer clear-cache 只清下载下来的 zip 包,不碰 composer.lock 里硬编码的旧哈希;rm -rf vendor 也不重写 lock 文件,下次 install 还拿旧哈希去比新包,必然再失败。
- 真正要动的是
composer.lock本身:它不是“配置”,而是“快照”,一旦和源不匹配,就必须重建 - 镜像源同步延迟是主因:阿里云/腾讯云等镜像常漏同步
dist.sha256或砍掉autoload字段,导致包体和 lock 记录对不上 - 切回官方源能过,不是因为“官方更稳”,而是 packagist.org 没做元数据精简,哈希天然一致
强制重装必须禁用镜像 + 清 lock + 加参数
直接运行 composer install --no-cache --force-checksums 是错的——如果镜像还在生效,它还是会去镜像源拉包,而镜像的元数据已经错了。
- 先全局禁用镜像:
composer config -g --unset repos.packagist,再显式设回官方源:composer config -g repo.packagist composer https://packagist.org - 彻底清理:
rm -rf vendor composer.lock(Windows 用rd /s /q vendor & del composer.lock) - 最后执行:
composer install --no-cache --force-checksums,这会强制从 packagist.org 下载并逐字节校验 - 装完再切回镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,但别立刻update,先验证是否稳定
离线环境也报校验失败?那是网络开关没关
即使 vendor/ 和 composer.lock 都完整,composer install 在离线时仍会卡在校验环节——因为它默认要联网确认包是否存在、URL 是否可访问。
- 必须设环境变量:
COMPOSER_DISABLE_NETWORK=1,否则所有--no-xxx参数都无效 - 加安全参数:
--no-plugins --no-scripts --no-autoloader,防止插件或脚本隐式触发网络请求 - 全局配置残留也会 fallback 校验:
composer config --global repo.packagist false彻底禁用远程源 - 装完立刻补一记:
composer dump-autoload -o,否则运行时报Class not found
最容易被忽略的是 PHP 版本错位带来的“假校验失败”:CLI 的 php -v 是 8.1,但 Web 环境跑的是 PHP-FPM 8.3,composer.lock 里记录的 autoload 映射和平台约束会按 CLI 版本生成,后续必崩。别只改 platform 配置,先统一调用路径,比如用 /usr/bin/php8.3 composer install。











