作曲家未满足要求

Composer unsatisfied requirement

在作曲家设置中,我需要 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. 在您的应用程序的 composer.json 中,使用 @dev 标志为您在开发中需要的相应子依赖项添加一个额外的 require 键:

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

    通过这种方式,您基本上可以将特定的子依赖项列入白名单以用作开发。

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

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

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

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

针对这种情况的最佳解决方案是开始标记您的版本

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

它将设置下限并允许所有包 "dev" 个包。

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

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