首页 > 解决方案 > 当 Composer 依赖在版本中发生冲突时,解决方法是什么?

问题描述

我的项目依赖于两个包,A并且B它们都依赖于some-library,不幸的是在不兼容的版本中:

这是 Composer 无法解决的,因为 PHP 在运行时只能加载单个版本的类/接口。

我有哪些选择?只要它们是自动化的,我就可以接受“丑陋”的解决方法。我想不惜一切代价避免做一些脆弱的手工工作,比如分叉A和升级它的使用。some-library

标签: composer-php

解决方案


没有解决方法。根据设计,Composer假定您的项目使用一致的依赖关系并且一切都保持有效。

如评论中所述,您可以为依赖项添加前缀以隔离需要特定库版本的项目部分。这样,前缀代码在 Composer 术语中是一致的,您可以继续使用最新版本进行开发。

这些是我可以推荐的几个前缀:

humbug/php-scoper是一个众所周知的工具,可以根据搜索和替换步骤(查找器和修补程序)为代码添加前缀。

PHP-Prefixer是一种自动在线服务,用于根据composer.json定义将前缀应用于 Composer 依赖项。您为项目定义新的命名空间和前缀。

免责声明:我是主要的 PHP-Prefixer 开发人员。


推荐阅读