所以我试图利用作曲家包的强大功能使我的应用程序更加模块化。所以我的主要应用程序现在依赖于我正在提取的私有存储库:
"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
。我究竟做错了什么?我错过了什么吗?这不是这样做的方法吗?
答案 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将了解它们并允许从最新(非冲突)版本的任何位置添加任何软件包。