Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Composer钩子修复包版本_Php_Composer Php - Fatal编程技术网

Php Composer钩子修复包版本

Php Composer钩子修复包版本,php,composer-php,Php,Composer Php,我需要挂接composer安装过程,以修复根包的二级依赖项的版本。也就是说,我的软件包依赖于一些版本正确的软件包,但这些软件包依赖于其他软件包,其版本是错误的。我尝试使用预包安装钩子来修补这些版本,但它对我不起作用,Installer::prePackageInstall中的代码没有执行 根包composer.json如下所示: { "name": "***/root-package", "repositories": [ { "type": "composer", "url"

我需要挂接composer安装过程,以修复根包的二级依赖项的版本。也就是说,我的软件包依赖于一些版本正确的软件包,但这些软件包依赖于其他软件包,其版本是错误的。我尝试使用预包安装钩子来修补这些版本,但它对我不起作用,Installer::prePackageInstall中的代码没有执行

根包composer.json如下所示:

{
    "name": "***/root-package",

    "repositories": [ { "type": "composer", "url": "http://***/packages.json" } ],

    "require": {
        "***/first-level-dep-1": "dev-release-XX",
        "***/first-level-dep-2": "dev-release-XX"
    },

    "scripts": {
        "pre-package-install": [
            "root-package\\Installer::prePackageInstall"
        ]
    }
}
{
    "name": "***/first-level-dep-1",

    "repositories": [ { "type": "composer", "url": "http://***/packages.json" } ],

    "require": {
        "***/second-level-dep-1": "*",  // !!! here is my problem
        "***/second-level-dep-2": "*"
    }
}
第一级依赖项composer.json如下所示:

{
    "name": "***/root-package",

    "repositories": [ { "type": "composer", "url": "http://***/packages.json" } ],

    "require": {
        "***/first-level-dep-1": "dev-release-XX",
        "***/first-level-dep-2": "dev-release-XX"
    },

    "scripts": {
        "pre-package-install": [
            "root-package\\Installer::prePackageInstall"
        ]
    }
}
{
    "name": "***/first-level-dep-1",

    "repositories": [ { "type": "composer", "url": "http://***/packages.json" } ],

    "require": {
        "***/second-level-dep-1": "*",  // !!! here is my problem
        "***/second-level-dep-2": "*"
    }
}

在安装过程中,我需要将*替换为适当的版本。

您不必修复该版本。您只需在正确的版本中添加第二级dep作为您自己的依赖项,问题就解决了


如果第一级依赖项需要该软件包的任何版本,则依赖于正确版本的您将限制可安装版本为您允许的版本。

如果我将所有第二级和更多级别的DEP添加为我自己的DEP,我将失去使用composer DEP管理的所有优势。这里*并不表示任何版本。在我们的情况下,这意味着根据CI building branch(例如CI building branch)的情况,在正确的版本上替换我。当CI克隆目标包并开始构建它们时,它将替换根包composer.json中的*并期望所有二级deps版本也将被替换。但这种方法已经不起作用了。同时,我们可以在每个包中显式地提交version==release分支,但解决vcs冲突需要大量的工作。然后您的问题就没有得到正确的解释。如果您有任何系统希望CI流程使用正确版本替换版本*,请在问题中添加详细信息。不过,我已经说过,您仍然会失去Composer deps管理的所有优势,因为我希望所有包都能根据其软件功能需求定义其版本。我非常喜欢使用tilde版本需求并坚持语义版本控制。这样,任何软件包都可以声明所需的最低版本,但允许任何可能的更新版本。您是对的,我应该更新问题。此外,我们已经找到了通过composer软件包安装挂钩实现补丁版本的方法。我周末在这里描述它。非常感谢。