我发现了以下问题:
我在bitbucket上有6个私有存储库
应用程序是我的主要-“根”包。现在,应用程序可以在composer.json中使用多个composer.json以及核心包,而与相比,在composer.json中有多个捆绑包
问题是当我用
composer install在我的核心包中-它通常在内核/供应商文件夹中下载bundle1和bundle2。
但是,当我尝试从应用程序安装软件包时--它给出了以下错误:
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的两个部分:
这是一个2级的依赖,我的回复必须是私密的,我现在不想玩萨提斯。
谢谢你的帮助。:)
发布于 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元数据。
发布于 2016-04-27 22:07:17
您需要在composer.json的根级指定所有私有包。如前所述- composer不会进行递归扫描。我强烈建议使用Toran代理。这将解决问题。Satis也是一个选项,但是Toran几乎不需要任何配置,并且具有非常好的GUI :)
https://stackoverflow.com/questions/36895257
复制相似问题