composer install --dry-run真实行为是仅校验composer.lock可解析性与vendor一致性,不下载、不解压、不写入vendor、不生成autoload.php、不执行脚本;默认无输出,仅当vendor缺失或不匹配时才列出操作,lock完整则显示“nothing to install, update or remove”。

composer install --dry-run 真实行为是什么
它不下载、不解压、不写入 vendor/,也不生成 autoload.php 或执行任何脚本(如 post-install-cmd)。它只读取现有 composer.lock,校验依赖是否可解析、版本是否一致、权限是否足够,并决定“如果真运行 install,会装/删哪些包”。
常见误判是以为它会列出变更——其实默认无输出;只有当 vendor/ 缺失或与 lock 不匹配时,才打印类似 Installing monolog/monolog (2.9.1) 的行。若 lock 完整且 vendor/ 已就位,终端直接退出,显示 Nothing to install, update or remove。
为什么加 -v 也看不到完整变更列表
composer install --dry-run -v 仍不会显示“从 x.x.x → y.y.y”这类更新对比,因为它根本不重算依赖——它严格按 composer.lock 还原,不看 composer.json 里的新约束。
- 想预览“升级后效果”,必须用
composer update --dry-run --no-install -v,否则你看到的只是当前锁文件的静态快照 -
-v在install --dry-run中主要暴露解析起点(如Reading ./composer.json)和平台检查失败(如ext-zip is missing),但不展开包级变更 - 若
composer.lock缺失,--dry-run会尝试临时构建锁结构,但结果不可复现,CI 中应禁止此用法
哪些错误它能提前发现,哪些完全看不见
它能暴露:依赖冲突(Your requirements could not be resolved)、PHP 版本或扩展不满足 platform 配置、composer.lock 格式损坏、权限不足导致无法模拟写入路径。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
它完全不检查:
- 网络连通性或镜像源有效性(哪怕配置了已失效的私有仓库,只要本地
lock可解析就通过) -
vendor/目录实际是否可写(只模拟路径合法性,不file_put_contents) -
autoload.php生成后能否被require(不触发 autoloader 加载逻辑) - 脚本钩子中调用的外部命令是否存在(如
npm ci没装也不会报错)
CI/CD 中怎么用才不算白跑
在 GitHub Actions 或 GitLab CI 里,单靠 composer install --dry-run 做守门人容易误判。更可靠的组合是:
- 验证 lock 文件完整性:
composer install --dry-run --no-interaction --no-progress,失败即中断流水线 - 确认依赖可还原:
composer validate && composer show --locked | head -20,比干等--dry-run更快定位问题 - 若 PR 修改了
composer.json,必须搭配composer update --dry-run --no-install -v,否则根本看不出约束变化带来的连锁影响
最常被忽略的一点:它不读取运行时 PHP 版本,只认 composer.json 里 config.platform.php 的硬编码值。开发机上成功,生产环境 PHP 版本不同,照样翻车。










