运行作曲家安装时如何解决两个包的冲突?

我想安装这两个软件包:

>“anahkiasen / former”:“dev-master”
>“vespakoen / menu”:“dev-master”

但作曲家说,他们每个都取决于这个软件包的不同版本:

>“anahkiasen / html-object”:“dev-master”
>“anahkiasen / html-object”:“1.1.2”

Problem 1

06000

我该如何解决?

这里的基本问题是使用分支(dev-master)而不是标记版本。使用分支很可能会在问题上结束。我正在看Stackoverflow上的作曲者问题,每当有人报告包裹麻烦时,他们都在99%的时间内使用开发分支和“最低稳定度:dev”。

发生了什么?我必须假设你想第一次安装这些软件包。所以Composer不安装,但更新包。否则,一个能够满足所有版本要求的版本的工作集将被记录在composer.lock中。

所以这里是依赖情况:两个包依赖于第三个包,但是这两个包需要不兼容的版本。

你能修好它吗?本地composer.json文件中只有一个工具能够允许安装第三个软件包:使用inline version alias安装它。

"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可以解析这两个软件包的依赖关系。

这样做的问题是,根据第四个 – 在三个不同的版本中,您将有三个软件包失败。

对于每个开发部门来说,正确的一点是在THEOR composer.json中包含一个分支别名声明,这将允许Composer检测到dev-master分支实际上等同于1.1.x版本,这可能在这里有帮助如果任何包明确地需要给定的版本号 – 1.1.x不是1.1.2)。添加分支别名仍然是一件好事,应该做。如果维护者想要避免在composer.json中持续维护此硬编码版本别名,则他们可以替代地在其名称中(即“v1.1.x”或“1.1”)的分支中开发该版本。 x“将被Composer检测到包含所述版本的开发稳定性)。

请注意,我在最后一段描述的问题是软件包明确要求给定的版本号。使用这种方法,如果您需要这样的包,则不能自己使用不同版本的依赖包,或者使用不同的包。虽然可能只需要一个版本的情况,但更好的解决方案是要求版本范围。

我的个人喜好是使用插入符操作符大于1.0的版本:^ 1.1.7将需要1.1.7作为最低版本,但不会更新到任何版本2.0.0,这被认为具有不兼容的更改。如果一个包根据语义版本的标签被新版本仔细标记,这样做就像一个魅力。您不会对不兼容的更改感到惊讶(除非人为干扰,否则您应该能够检测到此故障,并在软件中断时回滚更新)。

对于低于1.0的版本,请注意,插入符操作符与波形符运算符(0731)不同。对于被标记为0.x的软件包,我更喜欢使用波形符号,以便获得“兼容”功能更新,即使语义版本控制允许不兼容的更新在0.x范围内。

但即使没有语义版本,版本号中的每一点不准确都有助于定义1.1。*(据说将会更新到所有即将发布的修补程序版本)或者> = 1.1.2,< 1.2.5。 最糟糕的一件事就是要求“大师”。虽然这确实非常不准确(它会解决到分支中的任何可能的提交,这取决于您更新的时间),但问题是您不能回到以前版本的“dev-master”,除非您确切知道哪个提交id你需要并将这个要求添加到composer.json。但是,与上述情况完全相同,需要一个确切的版本(一个git标签只是一个提交ID的命名别名)。

http://stackoverflow.com/questions/21052831/how-to-solve-two-packages-requirements-conflicts-when-running-composer-install

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:运行作曲家安装时如何解决两个包的冲突?