composer-php - 当 Composer 依赖在版本中发生冲突时,解决方法是什么?
问题描述
我的项目依赖于两个包,A
并且B
它们都依赖于some-library
,不幸的是在不兼容的版本中:
A
取决于lib
@ 1.0B
取决于lib
@ 2.0
这是 Composer 无法解决的,因为 PHP 在运行时只能加载单个版本的类/接口。
我有哪些选择?只要它们是自动化的,我就可以接受“丑陋”的解决方法。我想不惜一切代价避免做一些脆弱的手工工作,比如分叉A
和升级它的使用。some-library
解决方案
没有解决方法。根据设计,Composer假定您的项目使用一致的依赖关系并且一切都保持有效。
如评论中所述,您可以为依赖项添加前缀以隔离需要特定库版本的项目部分。这样,前缀代码在 Composer 术语中是一致的,您可以继续使用最新版本进行开发。
这些是我可以推荐的几个前缀:
humbug/php-scoper是一个众所周知的工具,可以根据搜索和替换步骤(查找器和修补程序)为代码添加前缀。
PHP-Prefixer是一种自动在线服务,用于根据composer.json
定义将前缀应用于 Composer 依赖项。您为项目定义新的命名空间和前缀。
免责声明:我是主要的 PHP-Prefixer 开发人员。
推荐阅读
- java - 为什么我必须在 Java 中的返回类型之前声明类型参数?
- javascript - 返回模型的猫鼬键未定义
- azure - ADF ARM 模板似乎不包括工厂本身
- kubernetes - 如何从 openshift 读取远程服务器上的文件
- json - Flutter 如何将嵌套的 JSON 数组插入到不同的 SQLite 表中
- python - tkinter 消息框的问题
- string - 为什么我的代码没有将字符串转换为字符?
- reactjs - 如何在 Next.js react 应用程序上添加 facebook Pixel?
- vuejs2 - 如何传递动态值以在父级的 v-if 中使用?
- terraform - 如果省略参数,Terraform 是否打算忽略更改?