必须用composer update --dry-run -v,因它完整执行依赖解析(读composer.json、查元数据、处理conflict等)仅跳过写入,不加-v则无法看到updating/downgrading/installing等关键变更及冲突详情。

composer update --dry-run 是唯一能真实预演升级的命令
想看 composer.json 修改后到底会拉哪些包、升什么版本、有没有冲突?必须用 composer update --dry-run,不是 install --dry-run(压根不支持),也不是 update --lock(只校验 lock 文件一致性)。前者完整重跑依赖求解:读 composer.json、合并 config.platform、查 Packagist 元数据、处理 conflict 规则、计算所有升降级路径——唯独跳过写文件和执行脚本。
不加 -v 就等于没看懂输出
--dry-run 默认输出极简,真正关键信息全藏在详细模式里。必须加 -v 才能看到:
-
Updating monolog/monolog (2.9.1 => 3.0.0)→ 主版本跃迁,得立刻查 UPGRADING.md -
Downgrading guzzlehttp/psr7 (2.6.2 => 1.9.1)→ 通常因某依赖强制锁旧版,可能引发方法调用失败 -
Installing new package/name (v4.2.1)→ 新增包,确认是否在安全白名单内 -
Skipped laravel/framework: version constraint ^10.0 is not satisfied→ 冲突源头,得顺藤摸瓜看谁挡了路
限定范围才能避开干扰,精准评估风险
全量 update --dry-run -v 输出动辄几百行,容易漏掉关键变更。实际操作中应按需缩小范围:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 只改了一个包?用
composer update laravel/framework --dry-run -v - 怕连锁反应?加
--with-dependencies,比如composer update guzzlehttp/guzzle --dry-run -v --with-dependencies - CI 流水线里验证 PR?加
--no-interaction防止卡住,再配合--ignore-platform-reqs(若目标环境 PHP 版本与本地不同)
--dry-run 不报错 ≠ 真安全
它只解决“依赖图能不能算出来”,不保证“算出来的包跑得起来”。这几个盲区必须人工补位:
-
ext-gd在composer.json里声明了,但 php.ini 没开 ——--dry-run完全不检查运行时扩展是否真已加载 - 私有仓库 token 过期、镜像超时、DNS 解析失败等问题,
--dry-run阶段常不暴露,要到真实install或update才崩 -
autoload冲突(比如两个包都注册了"psr-4": {"App\": "src/"})得等composer dump-autoload才浮现 -
require-dev里的phpunit/phpunit升级了主版本?--dry-run不提示,但 tests/ 可能全红
真正麻烦的不是命令敲错,而是扫完输出就以为万事大吉——它不代替测试,哪怕输出干净,也得跑单元测试+集成测试。










