作曲家不满意的要求

时间:2015-03-25 15:39:42

标签: composer-php satis

在作曲家设置中,我需要vendor/package-Avendor/package-B

包B构建在包A上,并在其composer.json中定义为一个要求。

直接安装基础包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,但是您还设置了如果可用的稳定版本,您将更喜欢那个。大多数情况下,这会产生想要的行为,但有时它可能是古怪的。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

相关问题