php-http/discovery 1.15.1仍导致Contao4.13自定义模块composer install死循环?
问题分析与解答
根因推测
- Composer生命周期钩子冲突:php-http/discovery作为插件,会在依赖安装、自动加载生成阶段执行HTTP客户端自动发现逻辑;你的自定义模块
imi/composer-scripts-contao大概率也注册了相同的生命周期事件(比如post-autoload-dump、post-install-cmd),其中某个脚本执行时触发了Composer依赖重算或自动加载更新,两者互相触发形成循环。 - 自动加载递归触发:如果自定义脚本执行时调用了需要自动加载的代码,而php-http/discovery的逻辑又会触发自动加载文件重新生成,双方互相满足对方的执行条件,就会陷入无限循环。
- 边缘场景兼容遗漏:官方修复的是通用场景下的循环问题,但你的自定义模块和php-http/discovery的交互属于未覆盖的边缘情况——比如自定义脚本修改了Composer内部状态,导致官方修复逻辑失效。
php-http/discovery插件是否还有问题?
官方1.15.1版本确实修复了核心的无限循环问题,但不排除和特定第三方Composer脚本/插件交互时存在兼容漏洞。你的场景里问题只在两个插件共存时出现,说明不是php-http/discovery单独有问题,而是两者的逻辑交互触发了未被覆盖的循环条件。
排查与解决建议
- 检查
imi/composer-scripts-contao注册的Composer事件,重点看是否在post-autoload-dump或post-install-cmd里执行了修改依赖状态、触发自动加载更新的操作(比如调用composer dump-autoload、修改composer.json)。 - 在自定义脚本里加日志,跟踪执行流程,确认哪一步触发了php-http/discovery的重复执行。
- 锁定php-http/discovery到1.15.1+版本,同时确保Composer是2.5.3+,再测试循环是否消失。
- 如果自定义脚本不需要在安装阶段执行,调整它的触发事件时机,避开php-http/discovery的执行逻辑。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

