composer update --lock-only是唯一能安全刷新content-hash且不动vendor的命令:它完整读取composer.json验证约束,仅重写哈希、排序、格式与元数据;而composer update --lock仅快照vendor目录并标准化json,不校验约束也不更新哈希。

“--lock” 不是强制刷新哈希的命令,它不保证哈希更新,也不校验 vendor 内容是否匹配。 真正能安全刷新 content-hash 且不动 vendor 的,只有 composer update --lock-only(Composer 2.2+)。
为什么 composer update --lock 不等于“刷新哈希”
这个命令根本不会重新计算 content-hash —— 它只做两件事:把当前 vendor/ 目录里的包信息(版本、dist URL、sha256)快照写回 composer.lock,并标准化 JSON 格式(缩进、字段顺序)。它不读 composer.json 的新内容,也不验证约束是否仍满足。
- 你改了
composer.json里的"php": ">=8.2",--lock可能直接报错退出,也可能静默忽略,取决于本地 vendor 是否恰好兼容 - 你手动删过某个包的文件,
--lock不会发现,照样写 lock,后续install就会失败 - 它输出
Writing lock file并不表示哈希已对齐;如果composer.json和vendor/实际状态不一致,生成的 lock 是语义错误的
composer update --lock-only 才是真·刷新哈希的正确姿势
它完整读取当前 composer.json 全部内容(包括注释、空格、非依赖字段),验证已安装包是否仍满足所有约束,仅重写 content-hash、排序字段、JSON 格式和 platform 元数据,vendor/ 一丁点不动。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 适用场景:改了
description、加了config.sort-packages、调整了缩进或换行 - 必须搭配
--dry-run预检:composer update --dry-run --lock-only。如果输出里出现包版本变动,说明本地 vendor 已不满足新约束(比如 PHP 版本变了),不能硬刷 - 旧版 Composer(rm composer.lock && composer install 替代,那会升掉所有子依赖
想让哈希和 vendor 内容真正对齐?用 composer install 而不是 update
composer install 本身就会校验每个包的 dist.sha256。如果本地文件损坏或缺失,它会重新下载并写入正确哈希——但前提是 lock 文件本身合法且未被篡改。
- 前提:没动过
require/require-dev,只是想修复哈希不一致(如 CI 构建后校验失败) - 推荐组合:
composer install --no-scripts --no-plugins --no-cache,跳过插件干扰,强制重验哈希 - 注意:如果 vendor 里有未提交的 Git 修改(哪怕只是 README.md),
install会中断,必须加--discard-changes或先git checkout -- vendor/
最常被忽略的一点:composer.lock 的 content-hash 是对 composer.json 全文(含空格、换行、注释)做的 SHA256。任何编辑都必须走 --lock-only 同步,手动改哈希或删字段只会让 CI 拒绝构建。










