作曲家依赖包的变更

时间:2019-01-09 12:46:40

标签: composer-php

如何仅通过 修改我自己项目的composer.json文件来修改外部软件包的composer.json文件?

这仅用于测试目的。我需要测试一个软件包是否与另一个软件包的最新版本兼容。

我的项目composer.json:

{
    "require": {
        "foo/framework": "1.2.0",
        "bar/extension": "1.1.0"
    }
}

外部软件包(bar/extension)composer.json:

{
    "require": {
        "foo/framework": "1.2.0"
    }
}

所以这显然可行。但是,假设我要使用foo/framework的新版本1.3.0。由于bar/extension取决于较早的版本,因此无法使用。

仅使用项目的composer.json,如何更改对bar/extension软件包的要求?

2 个答案:

答案 0 :(得分:3)

您可以使用package类型的存储库来覆盖composer.json的依赖性。在您的composer.json中添加以下内容(应调整网址):

"repositories": [
    {
        "type": "package",
        "package": {
            "name": "bar/extension",
            "version": "1.1.0",
            "dist": {
                "url": "https://github.com/bar/extension/archive/1.1.0.zip",
                "type": "zip"
            },
            "require": {
                 "foo/framework": "1.2.0 || 1.3.0"
            }
            // rest of necessary settings from original bar/extension composer.json 
        }
    }
],

请注意,package类型非常不灵活,会带来很多问题-我不建议将其用于测试以外的其他用途。实际上,最好只是分叉该软件包并使用vcs存储库在您的项目中使用它-您将能够在软件包中进行必要的调整,并作为对上游的请求请求(或永久使用fork) )。

答案 1 :(得分:0)

主要思想是,如果bar/extension取决于较旧的版本,则不应使用foo/framework的较新版本,因为它可能与较新版本不兼容,并且会导致应用程序中的错误。 / p>

但是如果bar/extension在版本范围内,并且您想使用该范围内的最新版本,则可以使用conflict指令进行指定。

或者甚至可以尝试使用replace指令。