【问题标题】:Nested dependencies and private repositories with composer使用 composer 嵌套依赖和私有仓库
【发布时间】:2016-06-12 12:10:24
【问题描述】:

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

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

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

例如,假设在根composer.json中我们需要两个包company\bcompany\c,而包company\c需要另一个包company\d .然后生成的根composer.json 将如下所示:

{
    "require": {
        "company/b": "dev-master",
        "company/c": "dev-master",
        "company/d": "dev-master"
    },
    "autoload": {
        "psr-4": {
            "Company\\" : "src\Company"
        }
    },
    "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 中指定的依赖项?

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

【问题讨论】:

    标签: composer-php


    【解决方案1】:

    快速搜索并查看Composer documentation 后,我发现repositories 只能在根composer.json 中指定。

    另外,可以在根 composer.json 中指定是否允许使用以下软件包的开发版本:

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

    GitHub 上的 this issue 也非常有用。

    【讨论】:

      【解决方案2】:

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

      我建议您查看Satis 以创建本地 Composer 存储库。这只需要您将这个单一存储库添加到所有包的所有composer.json 文件中,它将用作有关所有私有存储库的可更新知识源。您不再需要到处添加 Git 存储库列表。

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

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

      【讨论】:

      • 将您的答案标记为正确的附加信息。幸运的是,我们已经在内部使用版本控制,所以一定会尝试一下 Satis。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 2016-03-18
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      相关资源
      最近更新 更多