composer如何使用–dry-run预演操作_composer模拟执行命令【预览】

5次阅读

composer install 不支持 –dry-run 参数,该选项仅适用于 composer update 和 composer require(composer 2.2+ 稳定支持),直接使用会报错“unrecognized option”。

composer如何使用–dry-run预演操作_composer模拟执行命令【预览】

composer install –dry-run 为什么没效果

因为 composer install 默认不支持 --dry-run 参数,直接加会报错:Unrecognized option: --dry-run。这个参数只在 composer updatecomposer require 中有效,且从 Composer 2.2+ 才正式稳定支持。

  • 旧版本(
  • install 不支持是因为它依赖 composer.lock,行为确定性高,官方认为没必要加预演
  • 想预览 install 效果?得先用 composer update --dry-run 看锁文件会怎么变,再推断 install 行为

composer update –dry-run 看到的到底是什么

它模拟更新全过程,但不写入任何文件:不改 composer.lock、不下载包、不执行脚本。输出里关键信息是「Resolving dependencies」和「Writing lock file」这两段——前者告诉你哪些包会被升级/降级,后者显示新锁文件内容差异(如果启用 --verbose)。

  • -v--verbose 才能看到具体包版本变化,否则只提示「Would update x packages」
  • 如果项目有 platform 配置(如 "php": "8.1"),--dry-run 会严格按此解析兼容性,避免误判
  • 注意:它不会跳过 post-update-cmd 脚本的检查逻辑,但真执行时才调用;预演中脚本本身不运行

require 命令加 –dry-run 的真实用途

这是最常被低估的用法:composer require vendor/package --dry-run 能提前暴露冲突,比如 PHP 版本不匹配、依赖环、或某个包要求的扩展未启用。

  • 常见错误现象:Your requirements could not be resolved to an installable set of packages —— 预演时就抛出,省得删 vendor 重试
  • 不加 --dry-run 时,Composer 可能先下载部分包再失败,浪费时间和磁盘空间
  • 参数顺序敏感:必须写成 composer require foo/bar --dry-run,不能写成 composer require --dry-run foo/bar(旧版会忽略)
  • 搭配 --no-update 也没意义,因为 --dry-run 本身就跳过更新

别把 –dry-run 当成安全网

它只校验依赖图和锁文件变更,不验证运行时行为。比如某包在预演时能装上,但实际加载时因 autoloader 错误或扩展缺失而崩溃,--dry-run 完全发现不了。

  • CI 流程里用它防大范围依赖污染很有效,但不能替代本地 composer install && php -m | grep needed_ext
  • 私有仓库认证失败、网络超时等外部问题,预演阶段通常不触发(除非启用了 --with-dependencies 并涉及远程解析)
  • 最易忽略的一点:它不检查 autoload-dev 下的类是否仍可解析,dev 依赖变更可能悄无声息地破坏测试环境
text=ZqhQzanResources