嵌套依赖项和带有作曲家的私有存储库



在我目前工作的公司,我们最近开始将我们的代码移动到不同的私有存储库中,以便它更易于维护和可重用(并且也使以后更容易开源)。

每个PHP存储库也是一个Composer包,只要我们需要它,我们的项目中就可以需要它。

目前这种方法存在一个问题:每次我们需要一个依赖于其他包的包时,我们也需要在根 composer.json 中指定这些包。

例如,假设在根 composer.json 中我们需要两个包 companybcompanyc ,并且包companyc需要另一个包companyd 。然后生成的根composer.json将如下所示:

{
    "require": {
        "company/b": "dev-master",
        "company/c": "dev-master",
        "company/d": "dev-master"
    },
    "autoload": {
        "psr-4": {
            "Company\" : "srcCompany"
        }
    },
    "repositories": [
        {
            "type": "vcs",
            "url":  "git@bitbucket.org:company/b.git"
        },
        {
            "type": "vcs",
            "url": "git@bitbucket.org:company/c.git"
        },
        {
            "type": "vcs",
            "url": "git@bitbucket.org:company/d.git"
        }
    ]
}

有没有办法避免在根 composer.json 中指定嵌套依赖项,并在每个包中使用 composer.json 中指定的依赖项?

编辑:我之前所说的一切都只对私有包有效。如果一个包,比如说companyb,需要一个可以在 Packagist 上找到的公共包,那么可以在 companyb composer.json 中指定该依赖项,它将被导入。

正如您正确发现的那样,只有根包才能将存储库元数据添加到已知包的集合中。

我建议你看看Satis创建一个本地的作曲家存储库。这只需要您将这个单一存储库添加到所有软件包的所有composer.json文件中,它将用作有关所有私有存储库的可更新知识来源。不再需要在任何地方添加 Git 存储库列表。

通过这种方式,我成功地为我们的 IT 企业托管了大约 120 个内部包。将此视为一个标志,一旦您开始将孤立的任务拆分为一个包,您将很快获得更多任务。

另请注意,认真对待版本控制很重要。停止依赖分支 - 标记您的软件,发布,使用语义版本控制。如果你不这样做,事情会在某个时候破裂,人们会诅咒你(正确)或作曲家(不正确)不工作或把事情搞砸。

在快速搜索并查看了作曲家文档后,我发现repositories只能在根 composer.json 中指定。

此外,还可以在根 composer.json 中指定是否允许使用以下方法开发包的版本:

"minimum-stability": "dev",
"prefer-stable": true

GitHub上的这个问题也非常有用。

相关内容

  • 没有找到相关文章

最新更新