在作曲家设置中,我需要vendor/package-A
和vendor/package-B
.
包 B 建立在包 A 的基础上,并在其 composer.json 中将 A 定义为需求。
直接安装基础包 A 工作正常。其他需求由 Packagist 解决,并且包本身从私有存储库中正确提取。
但是,当只安装包 B 时(由于要求,它也应该拉入包 A),我收到以下错误:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- Installation request for vendor/package-B dev-master@dev -> satisfiable by vendor/package-B[dev-master].
- vendor/package-B dev-master requires vendor/package-A dev-master@dev -> no matching package found.
这两个包都没有任何标记的版本,并且在 dev-master 版本上运行。
有什么我忽略的吗?
编辑
对于那些对解决方案感兴趣的人,这是我从下面选择的答案中学到的总结。
基本上,存在三种方法来安装深度 dev-master 依赖项。按照最推荐的顺序:
标记所有版本并使用标记的版本约束,而不是到处使用 dev-master。(我实际上最终这样做了!)
在您的应用程序中,使用您在 dev 中所需的相应子依赖
composer.json
的标志添加一个额外的 require 键:@dev
{ "require": { "vendor/package-B": "dev-master", "vendor/package-A": "@dev" } }
这样,您基本上可以将要用作开发的特定子依赖项列入白名单。
在您的应用程序中
composer.json
,添加minimum-stability
和prefer-stable
键,如下所示。{ "minimum-stability": "dev", "prefer-stable" : true }
在最后一种方法中,您将稳定性约束降低为 dev,但您还设置了如果稳定版本可用,您会更喜欢那个版本。大多数情况下,这会产生想要的行为,但有时它可能很古怪。