提问者:小点点

composer如何处理同一软件包的多个版本?


这可能(应该)以前在某个地方被问过,但我似乎找不到答案。如果有人提供链接,我可以删除这篇文章!:

我只是想了解一下composer的一些功能(可能也适用于其他包管理器)。

基本上,我只想知道composer在以下场景中做什么:

1.

我的主项目有一个依赖项:

"guzzlehttp/guzzle": "5.0.*",

我的外部捆绑包依赖于

"guzzlehttp/guzzle": "5.0.*",

composer是否只安装一次guzzle HTTP/guzzle,因为它知道它只需要一次?

2.同样的场景,但在未来,如果有人更新要使用的主项目:

"guzzlehttp/guzzle": "6.0.*",

composer现在会安装两个版本的guzzle(5和6)(我想这是它应该做的),还是会使用最高版本(即6)?另外,如果有两个版本,是否会因为名称空间可能相同而导致冲突?

谢谢


共2个答案

匿名用户

是,Composer只能安装每个扩展/包的一个版本。

因为答案1:作曲家会认为你的主项目和外部包不兼容。

在这种情况下,你可以

  • 在你的主要项目中也使用版本5。
  • 要求外部包所有者也升级到版本6,如果它兼容.
  • 分叉外部包,并使其兼容版本6自己

匿名用户

我们今天遇到了一个情况,我们使用了多个库,一个使用了古斯v5,另一个使用了古斯v6。升级(或降级)并不是一个可行的选择,因为它是第三方代码,所以我们必须能够安装两个版本的古斯。

这就是我们所做的。这完全是一种水力压裂技术,我建议这样做只是作为绝对的最后手段。它可以工作,但是更新调用代码以仅使用一个版本是一个更好的选择。

诀窍在于,您需要重新命名这两个版本中的一个。在我们的案例中,我们决定将v6改为GuzzleHttp6。以下是如何做到这一点:

  1. 确保您的编写器。json已启用v6:
"require": {
        "guzzlehttp/guzzle": "^6.2"
        // possible other stuff
    },