所以我正在尝试利用作曲家包的强大功能来使我的应用程序更加模块化。所以我的主要应用程序现在依赖于我拉入的私有存储库,如下所示:
"repositories": [
{
"type": "vcs",
"url": "../tenant-package.git"
}
],
"require": {
"archiveonline/tenant-package": "dev-master#a9ee4ec"
},
这很好用,它可以在本地拉入tenant-package
,如果我将 url 更新为 bitbucket url,它仍然可以正常工作。现在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"
},
现在当我在tenant-package
做一个composer update
时,我可以查看供应商目录以查找archiveonline/repository-package
。同样,当我在主应用程序中执行composer update
时,我可以在供应商目录中找到archiveonline/tenant-package
,但找不到archiveonline/repository-package
。我做错了什么?我错过了什么吗?这不是办法吗?
作曲家在决定哪些软件包可用之前,必须了解所有可能的存储库。默认情况下,列表中只有 packagist.org 知道所有公开发布的包。
如果要添加单个存储库,则必须将它们全部添加到根包中。不能间接使用根包中所需包中提到的存储库。
Composer 将扫描所有存储库以获取有关任何包含的软件包的信息,但如果它允许间接软件包链接,则如果一个软件包指向一长串其他软件包(如果包含在您使用的公共软件包中,则非常邪恶的拒绝服务(,或者它将递归地继续查找具有指向其他存储库的新链接的新存储库等,则此搜索可能永远不会结束。
设计决策是只使用根包composer.json
的存储库知识,所以这是必须提到所有 Git 存储库的地方。
可以想象,这很乏味,所以有一些帮助:Satis。您可以将其配置为了解所有存储库,它将在一个地方收集它找到的所有元数据。运行它会创建一些静态文件,您必须通过 HTTP 或 HTTPS 提供这些文件,并且您在所有composer.json
文件中指向此位置,并带有 "type":"composer", "url": "http://example.com/your/satis/path"
.
每当您添加新软件包或新软件包的新版本时,在 Satis 更新元数据文件后,Composer 将了解它们,并允许从最新(非冲突(版本中的任何地方添加任何软件包。