这可能(应该)以前在某个地方被问过,但我似乎找不到答案。如果有人提供链接,我可以删除这篇文章!:
我只是想了解一下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)?另外,如果有两个版本,是否会因为名称空间可能相同而导致冲突?
谢谢
是,Composer只能安装每个扩展/包的一个版本。
因为答案1:作曲家会认为你的主项目和外部包不兼容。
在这种情况下,你可以
我们今天遇到了一个情况,我们使用了多个库,一个使用了古斯v5,另一个使用了古斯v6。升级(或降级)并不是一个可行的选择,因为它是第三方代码,所以我们必须能够安装两个版本的古斯。
这就是我们所做的。这完全是一种水力压裂技术,我建议这样做只是作为绝对的最后手段。它可以工作,但是更新调用代码以仅使用一个版本是一个更好的选择。
诀窍在于,您需要重新命名这两个版本中的一个。在我们的案例中,我们决定将v6改为GuzzleHttp6。以下是如何做到这一点:
编写器。json已启用v6:
"require": {
"guzzlehttp/guzzle": "^6.2"
// possible other stuff
},