composer 不提供“只更新 composer.lock 而不安装依赖”的原生命令;真正“只动 lock”的操作是 composer update --lock,它重解析 composer.json 并仅覆写 lock 文件,不触碰 vendor;而 composer install --dry-run 仅模拟安装验证,不修改 lock。

Composer 不提供“只更新 composer.lock 而不安装依赖”的原生命令——所谓“dry-run 更新 lock”本质上是误解,实际能做的只有两种安全等价操作:用 composer update --lock 重生成 lock 文件(不改 vendor),或用 composer install --dry-run 模拟安装行为(但前提是 lock 已存在且匹配)。
为什么 composer update --lock 才是真正“只动 lock”的操作
这个命令会重新解析 composer.json 中的约束,按当前仓库状态(如 Packagist 最新元数据)重新计算依赖图,并仅覆写 composer.lock,完全跳过 vendor/ 目录的写入或删除。它适合以下场景:
- 你刚修改了
composer.json的版本约束(比如把"monolog/monolog": "^2.0"改成"^3.0"),但不想立刻下载包,只想先看 lock 会变成什么样 - CI 环境中需提前验证 lock 是否可被一致生成(例如检查是否引入了不兼容的 PHP 版本要求)
- 团队协作时,有人手动编辑了
composer.lock,你想用规范流程重建它以确认一致性
⚠️ 注意:composer update --lock 仍会访问网络(查包信息),若想离线运行,必须提前确保本地 repo 缓存完整;另外它不会校验当前 vendor/ 是否与旧 lock 一致——那不是它的职责。
composer install --dry-run 并不模拟“更新”,而是模拟“安装”
这个命令只在已有 composer.lock 的前提下生效,作用是:读取 lock 文件,检查所有包是否可下载、PHP 版本和扩展是否满足、权限是否足够,然后停止——不创建 vendor/,也不写任何文件。它常用于:
- 部署前快速验证:当前环境能否成功执行
composer install - Git hook 中拦截可能失败的 CI 构建(比如某包已从 Packagist 移除)
- 排查 “
composer install卡住” 是网络问题还是配置问题
❌ 它不会重新计算依赖关系,也不会改变 lock;如果你删了 composer.lock 或改了 composer.json,--dry-run 会直接报错退出,提示 “Your lock file does not contain a compatible set of packages”。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
常见错误:误用 composer update --dry-run
这个组合根本不存在——composer update 命令不支持 --dry-run 参数。试图运行会得到:
Unrecognized option: --dry-run
很多人想“看看 update 会装啥”,却搜到过时文档或混淆了 npm/yarn 的行为。正确替代方案只有两个:
- 先运行
composer update --lock,再git diff composer.lock查看变更 - 临时加
-v(verbose)参数:例如composer update monolog/monolog -v,它会在实际下载前打印将要安装/升级的包列表及版本 - 若需彻底隔离副作用,可在 Docker 容器里跑
composer update --no-install(注意:该参数仅在 Composer 2.5+ 支持,且仍会清空 vendor,只是不重装)
真正需要“预览更新结果”时,最稳的操作链
别依赖单一命令,组合使用才能覆盖所有边界:
- 运行
composer update --lock→ 生成新 lock - 运行
git status和git diff composer.lock→ 确认变更是否符合预期 - 运行
composer install --dry-run→ 验证新 lock 在目标环境中是否可落地 - 确认无误后,才执行
composer install(或composer update,如果真要装)
最关键的细节往往藏在 lock 文件的 content-hash 和 packages-dev 分段里:手动编辑 lock 后,即使格式正确,content-hash 不匹配也会导致 install 拒绝执行;而 dev 包的变动容易被 --dry-run 忽略,除非你显式加上 --with-all-dependencies。










