Composer不会在私有存储库中加载私有存储库?

时间:2016-02-01 14:39:49

标签: git composer-php

所以我试图利用作曲家包的强大功能使我的应用程序更加模块化。所以我的主要应用程序现在依赖于我正在提取的私有存储库:

"repositories": [
    {
        "type": "vcs",
        "url": "../tenant-package.git"
    }
],
"require": {
    "archiveonline/tenant-package": "dev-master#a9ee4ec"
},

这很好用,它在本地提取tenant-package,如果我将网址更新为bitbucket网址,它仍然可以正常工作。现在tenant-package有另一个名为repository-package的私有依赖项,我就像这样引入tenant-package

"repositories": [
    {
        "type": "vcs",
        "url": "https://rohan0793@bitbucket.org/archiveonline/repository-package.git"
    }
],
"require": {
    "archiveonline/repository-package": "dev-master#e4ce518"
},

现在当我在composer update中执行tenant-package时,我可以查看供应商目录以查找archiveonline/repository-package。类似地,当我在主应用程序中执行composer update时,我可以在供应商目录中找到archiveonline/tenant-package但我找不到archiveonline/repository-package。我究竟做错了什么?我错过了什么吗?这不是这样做的方法吗?

1 个答案:

答案 0 :(得分:1)

在决定哪些软件包可用之前,Composer必须了解所有可能的存储库。默认情况下,只有packagist.org在列表中,并且知道所有公开发布的包。

如果要添加单个存储库,则必须将它们全部添加到根包中。您不能间接使用根包中所需的包中提到的存储库。

Composer将扫描所有存储库以获取有关任何包含的包的信息,但如果它允许间接包链接,则如果包指向其他包的长列表,则此搜索可能永远不会结束(如果非常恶意拒绝服务,则包含在您使用的公共包中),或者它将递归地继续查找带有到其他存储库的新链接的新存储库,等等。

正在做出设计决策,只使用根软件包composer.json的知识库知识,因此这就是你必须提到所有Git存储库的地方。

你可以想象,这很乏味,所以有一些帮助:Satis。您将其配置为了解所有存储库,并将收集在一个位置找到的所有元数据。运行它会创建一些您必须通过HTTP或HTTPS提供的静态文件,并指向所有composer.json"type":"composer", "url": "http://example.com/your/satis/path"文件中的此位置。

每当您添加新软件包或新版本的新软件包时,在Satis更新元数据文件后,Composer将了解它们并允许从最新(非冲突)版本的任何位置添加任何软件包。