线上报“conclusion: don’t install xxx”必须停发布,因其表明composer install按lock还原时发现环境不匹配:php/扩展版本与platform配置冲突、dist.shasum失效或post-install-cmd被跳过,已危及运行时稳定性。

生产环境遇到 Composer 依赖冲突,不能删 composer.lock、不能跑 composer update、更不能加 --ignore-platform-reqs 强上——这些操作等于主动放弃版本一致性契约,上线后大概率出 runtime error 或 autoload failure。
为什么线上报 “Conclusion: don’t install xxx” 就该停发布?
这不是开发阶段的“求解失败”,而是 composer install 在严格按 composer.lock 还原时,发现当前运行环境(PHP 版本、扩展、OS 架构)与 lock 文件中记录的平台约束不匹配。常见触发点:
-
composer.json里写了"platform": {"php": "8.2.0"},但线上是 PHP 8.1.27,Composer 直接拒绝安装(哪怕所有包版本都对得上) -
composer.lock中某个包的dist.shasum和 Packagist 当前发布的哈希不一致——说明该包被重发或撤回过,lock 已失效 - CI 打包时用了
--no-interaction --no-scripts,但某包的post-install-cmd实际是加载关键配置,跳过导致后续 autoload 失败
composer install --dry-run 是上线前必跑的检查项
它不改任何文件,只模拟还原过程,能提前暴露三类问题:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 提示
Your lock file does not contain a compatible set of packages:说明composer.lock和当前composer.json不同步,必须先composer update --lock刷新元数据 - 卡在
Resolving dependencies超过 30 秒:说明 lock 文件里有 dev 分支或dev-main引用,而 Packagist 上该分支已不可达,需人工确认是否降级为稳定 tag - 输出中出现
ignored platform requirements:不是警告,是失败前兆——意味着 Composer 已自动跳过某些校验,但你的 autoloader 可能因缺少 ext-intl 等直接崩
线上环境不一致时,该修 platform 还是修服务器?
优先修服务器。因为 platform 是锁死行为,不是兼容层:
- 写
"platform": {"php": "8.1.27"}并不能让 PHP 8.1.26 “变”成 8.1.27;它只是告诉 Composer:“请假装这是 8.1.27”,结果可能装上一个只在 .27 里修复了 bug 的包,然后在线上跑挂 - 真正该做的是:CI 流水线里加一步
php -v和php -m校验,和composer show --platform对比;不一致就 fail,不许打包 - 如果真要临时适配旧环境,用
config.platform.php而非根级platform,这样不会污染开发者本地体验
lock 文件哈希不一致怎么快速定位坏包?
别逐行 diff,用命令直击问题:
-
composer install --dry-run -v会打印出第一个校验失败的包名和期望哈希 - 接着跑
composer show vendor/package-name,看versions列表里有没有那个 tag;没有就说明 Packagist 已下架 - 若有,再执行
curl -I https://api.packagist.org/p2/vendor/package-name.json,检查Last-Modified时间是否早于你 lock 文件里的time字段——晚于就是重发,早于就是被删
此时唯一安全做法是:从 Git 历史里 checkout 上一个可用的 composer.lock,或者联系包作者确认是否可切换到替代版本。任何手动编辑 lock 文件哈希的行为,都会让下次 composer update 完全失控。










