首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行composer安装时,如何解决两个包需求冲突?

在运行composer安装时,如何解决两个包需求冲突?
EN

Stack Overflow用户
提问于 2014-01-10 19:30:19
回答 1查看 34.8K关注 0票数 46

我想安装这两个软件包:

  • “anahkiasen/原”:“开发大师”
  • “vespakoen/菜单”:"dev-master“

但是composer说,它们中的每一个都取决于这个包的不同版本:

  • "anahkiasen/html-object":"dev-master“
  • "anahkiasen/html-object":"1.1.2“

问题1

  • anahkiasen/前开发主程序->的安装请求可由anahkiasen/formerdev-master满足。只能安装其中之一: anahkiasen/html-objectdev-master,1.1.2。- vespakoen/menu dev-master需要anahkiasen/html-object 1.1.2,->可由anahkiasen/html-object1.1.2满足。-anahkiasen/前dev-master要求anahkiasen/html对象开发-主->可由anahkiasen/html-objectdev-master满足。-vespakoen/菜单项开发-主->的安装请求,可由vespakoen/menudev-master满足。

我该怎么解决呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-30 21:41:34

这里的基本问题是使用分支(开发母版)而不是标记版本。使用分支很可能以问题告终。我正在看Stackoverflow上的Composer问题,每次有人报告软件包的问题时,他们都在使用开发分支和“最低稳定度:dev”99%的时间。

发生什么事了呢?我必须假设您希望第一次安装这些软件包。所以Composer不安装,而是更新软件包。否则,能够满足所有版本需求的一组工作版本将被记录在composer.lock中。

下面是依赖关系的情况:两个包依赖于第三个包,但这两个包需要不兼容的版本。

你能修好它吗?本地composer.json文件中只有一个工具能够安装第三个包:用一个内联版本别名安装它。

代码语言:javascript
复制
"require": {
    "anahkiasen/former": "dev-master",
    "vespakoen/menu": "dev-master",
    "anahkiasen/html-object": "dev-master as 1.1.2" /* add this line */
}

通过安装dev-master分支并将其声明为版本1.1.2,Composer可以解决这两个包的依赖关系。

这方面的问题是,当您有三个包时,它就会失败,这取决于三个不同版本的第四个包。

正确的做法是,每个开发分支都在其composer.json中包含分支别名声明,这将允许编写器检测开发主分支实际上等同于版本1.1.x,这可能在这里有所帮助(但如果任何包明确要求给定的版本号- 1.1.x不是1.1.2)。添加分支别名仍然是一件好事,应该做。如果维护人员希望避免在composer.json中不断维护这个硬编码版本别名,他们可以在一个分支中开发该版本,该分支以自己的名称支持.x版本(即编写器将检测到"v1.1.x“或"1.1.x”以包含所述版本以保证开发稳定性)。

请注意,我在上一段中描述的问题是包显式地要求给定的版本号。使用这种方法,如果您需要这样的包,您就不能自己或在不同的包中使用该包的不同版本。虽然可能存在只需要一个版本的情况,但更好的解决方案是要求版本范围。

我个人的偏好是,对于大于1.0的版本使用插入运算符:^1.1.7将需要1.1.7作为最低版本,但不会更新到任何版本2.0.0,该版本被认为具有不兼容的更改。如果一个包按照语义版本使用新版本进行了仔细的标记,这就像一种魅力。您不会对不兼容的更改感到惊讶(当然,除非人为干扰,但您应该能够检测到此故障并在软件崩溃时回滚更新)。

对于低于1.0的版本,请注意插入符号操作符的工作方式与倾斜运算符- 有关详情,请参阅手册。不同。为了获得“兼容”特性更新,我更喜欢在我控制下标记为0.x的包倾斜,即使语义版本控制允许在0.x范围内进行不兼容的更新。

但是,即使没有语义版本控制,版本号中的每一点不准确也会有所帮助,比如定义1.1.* (据说将更新到所有即将发布的bugfix版本)或>=1.1.2,<1.2.5

最糟糕的事情就是要求“开发大师”。虽然这确实是非常不准确的(它将解决分支中任何可能的提交,取决于您更新的时间),但问题是,除非您确切知道需要哪个提交id并将此要求添加到composer.json中,否则不能返回到以前版本的"dev-master“。但是,您的情况与上面完全相同,需要一个确切的版本( git标记只是提交id的命名别名)。

票数 78
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21052831

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档