首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有私有repos的Composer多级依赖关系

具有私有repos的Composer多级依赖关系
EN

Stack Overflow用户
提问于 2016-04-27 16:09:11
回答 2查看 1.1K关注 0票数 1

我发现了以下问题:

我在bitbucket上有6个私有存储库

  1. 应用程序
  2. implementation1
  3. implementation2
  4. 核心
  5. bundle1
  6. bundle2

应用程序是我的主要-“根”包。现在,应用程序可以在composer.json中使用多个composer.json以及核心包,而与相比,在composer.json中有多个捆绑包

问题是当我用

代码语言:javascript
复制
composer install

在我的核心包中-它通常在内核/供应商文件夹中下载bundle1和bundle2。

但是,当我尝试从应用程序安装软件包时--它给出了以下错误:

代码语言:javascript
复制
 Problem 1
    - Installation request for company/app-core-bundle dev-master -> satisfiable by company/app-core-bundle[dev-master].
    - company/app-core-bundle dev-master requires company/app-bundle1-bundle * -> no matching package found.

我发现的解决办法是在app/composer.json中指定所有存储库,但这是一个糟糕的解决方案,而且不是用于依赖项。

下面是composer.json的两个部分:

  1. app/composer.json {“名称”:“公司/应用程序”、“版本”:“主”、“类型”:“项目”、“最小稳定性”:"dev“、”许可“:”专有“、”存储库“:{ "type":"git”、"url":"git@bitbucket.org:username/company-app-core.git“},“要求”:{ "php":">=5.5.9","company/app-core-bundle":"dev-master“}
  2. 公司-app-core/Composer.json {“名称”:“公司/应用-核心-包”、“版本”:“主”、“类型”:"symfony-bundle“、”最小稳定性“:"dev”、“许可”:“专有”、“存储库”:{ "type":"git“、"url":"git@bitbucket.org:username/company-app-bundle1.git”},{ "type":"git","url":"git@bitbucket.org:username/company-app-bundle2.git“},”需要量“:{ "php":">=5.5","company/app-bundle1-bundle":"*","company/app-bundle2-bundle":"*”}
  3. 公司-app-bundle1 1/Composer.json { "name":"company/app-bundle1-bundle","version":"master","type":"symfony-bundle",“minimum-稳定性”:"dev","license":“专有”,"require":{ "php":">=5.5",.其他一些像FOS }这样的第3家公司的捆绑包

这是一个2级的依赖,我的回复必须是私密的,我现在不想玩萨提斯。

谢谢你的帮助。:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-27 17:58:17

没有比这更好的解决办法了。

您必须以某种方式提供托管包的每个存储库的元数据。Composer可以找到关于公共包的信息,因为它知道如何询问packagist.org。对于私有回复,这是无法完成的,因此必须有人给编写器一个指针来获取元数据。

基本上有两种方法:一种是您不想使用的是使用一个额外的实例来执行Packagist所做的事情,方法是运行您自己的Packagist实例,或者Satis,或者Toran代理。

另一种方法是在所有composer.json文件中分别列出每个存储库,这些文件可能需要托管在其中的包。这显然是次等的解决方案,因为这意味着您必须不断地将所有存储库添加到所有存储库的composer.json文件中,以防出现交叉引用的依赖关系。此外,它可能会减慢速度,因为在更新期间收集最新数据时涉及到服务器连接的数量。

你身上没有银弹。Composer决定不递归地扫描存储库,以便能够有可接受的运行时间。只有根存储库决定在哪里扫描包,默认情况下只使用Packagist (可以关闭),还可以扫描类似packagist的实例或repos。

Satis仍然是托管私有repos的最简单方法,因为它只需要在命令行上运行PHP,然后通过静态HTTP托管使所创建的文件可用。

Packagist是一个PHP应用程序,它依赖于数据库、redis、缓存、邮件服务器等--设置起来可能比Satis更复杂。

Toran代理也是一个PHP应用程序,但没有这种依赖(根据网站-我没有使用它的经验)。您只需要一个能够运行主脚本的vhost。

对于所有这些库,您都必须正确配置,添加要扫描的私有存储库列表,然后将新编写器信息源的URL添加到所有私有存储库中的所有composer.json文件中--但这只需最后一次完成,在此之后,该URL保持不变并指向更新后的所有repos元数据。

票数 3
EN

Stack Overflow用户

发布于 2016-04-27 22:07:17

您需要在composer.json的根级指定所有私有包。如前所述- composer不会进行递归扫描。我强烈建议使用Toran代理。这将解决问题。Satis也是一个选项,但是Toran几乎不需要任何配置,并且具有非常好的GUI :)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36895257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档