这是 composer 强制保障依赖可重现的机制,表明 composer.json 的 content-hash 与 composer.lock 不匹配,需通过 git checkout、composer update --lock 或从 git 恢复 lock 文件来修复。

composer validate --lock 报 “lock file is not up to date” 是什么信号
这不是警告,是明确拒绝——Composer 已检测到 composer.json 的内容哈希(content-hash)与 composer.lock 中记录的不一致。它不关心你改了哪一行,只认这个哈希值是否匹配。一旦不匹配,composer install 就会被拦停,这是保障依赖可重现的强制机制,不是 bug。
常见触发点包括:
- 手动编辑了
composer.json(比如增删包、改platform.php、调整minimum-stability),但没运行composer update或composer update --lock -
git pull拉下了别人更新的composer.json,但对方漏提了新composer.lock - CI 流水线里
composer.lock被覆盖、截断或写入失败(比如磁盘满、权限不足)
为什么不能跳过校验直接装
用 composer install --no-lock 或删掉 composer.lock 后硬装,等于放弃锁定语义。结果不可控:
-
composer install --no-lock会按当前composer.json重新解析依赖树,但不生成新composer.lock→ 下次再install还会崩,且团队成员、CI、生产环境全都不一致 - 删 lock 后跑
install实际等价于update,但没走完整校验流程(比如不检查platform兼容性),容易装出本地能跑、线上报错的版本 - 私有包或 Git URL 依赖可能因网络波动、分支变更导致装出不同 commit,破坏构建稳定性
如何安全修复哈希不匹配
先确认问题类型,再选动作:
用于端到端视频本地化流程的轻量编排器,路由至四个专注子技能——/wjs-transcribing-audio、/wjs-translating-subtitles...
- 如果刚拉了远程代码,且确定要复现线上环境 →
git checkout -- composer.lock拉回最新 lock,再composer install - 如果自己改了
composer.json并希望生效 → 运行composer update --lock(仅重写 lock,不碰 vendor)或composer update monolog/monolog(只更新指定包) - 如果 lock 文件本身损坏(
composer validate报 JSON 解析失败、file_get_contents返回 null),则必须从 Git 恢复:git restore composer.lock或git checkout HEAD -- composer.lock
执行 update 后务必 git diff composer.lock 看变更是否合理——错误的 lock 提交比不提交更危险。
CI/CD 中必须加 --strict 和 --no-check-publish
composer validate --lock 单独用不够。CI 脚本里应固定组合:
-
composer validate --strict --no-check-publish --lock:防字段拼错、弃用配置,跳过 Packagist 网络检查避免超时 - 紧接着跑
composer install --no-interaction --no-progress --dry-run:真正验证依赖能否解出,包括版本冲突、平台约束、私有源可达性
只跑 validate 不等于能装上;不加 --strict,很多拼写错误和非法值会被静默放过;不加 --dry-run,就永远不知道 lock 里写的包在当前环境下到底能不能拉下来。










