1

在作曲家设置中,我需要vendor/package-Avendor/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 依赖项。按照最推荐的顺序:

  1. 标记所有版本并使用标记的版本约束,而不是到处使用 dev-master。(我实际上最终这样做了!)

  2. 在您的应用程序中,使用您在 dev 中所需的相应子依赖composer.json的标志添加一个额外的 require 键:@dev

    {
        "require": {
            "vendor/package-B": "dev-master",
            "vendor/package-A": "@dev"
        }
    }
    

    这样,您基本上可以将要用作开发的特定子依赖项列入白名单。

  3. 在您的应用程序中composer.json,添加minimum-stabilityprefer-stable键,如下所示。

    {
        "minimum-stability": "dev",
        "prefer-stable" : true
    }
    

    在最后一种方法中,您将稳定性约束降低为 dev,但您还设置了如果稳定版本可用,您会更喜欢那个版本。大多数情况下,这会产生想要的行为,但有时它可能很古怪。

4

1 回答 1

2

这是一个稳定性解决问题。

这种情况的最佳解决方案是开始标记您的发布

你可以定义"minmum-stability":"dev".

它将设置下限并允许所有包的“开发”包。

您已明确定义dev-master@dev. 我不确定这是否真的需要。

这解释了你的情况:https ://igor.io/2013/02/07/composer-stability-flags.html

于 2015-03-25T16:53:28.920 回答