为什么作曲家说“结论:不安装”(似乎)没有障碍?

时间:2017-07-10 10:32:28

标签: composer-php

以下composer.json

{
    "type": "project",
    "minimum-stability": "dev",
    "require": {
        "jasny/bootstrap": ">=3.1.3",
        "2amigos/yii2-file-input-widget": "*"
    }
}

导致composer update的以下输出:

Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.                               

  Problem 1
    - 2amigos/yii2-file-input-widget 0.1.2 requires jasny/bootstrap v3.1.0 -> satisfiable by jasny/bootstrap[v3.1.0] but these conflict with your requirements or minimum-stability.
    - 2amigos/yii2-file-input-widget 0.1.1 requires jasny/bootstrap v3.1.0 -> satisfiable by jasny/bootstrap[v3.1.0] but these conflict with your requirements or minimum-stability.
    - 2amigos/yii2-file-input-widget 0.1.0 requires jasny/bootstrap v3.1.0 -> satisfiable by jasny/bootstrap[v3.1.0] but these conflict with your requirements or minimum-stability.
    - 2amigos/yii2-file-input-widget 1.0.0 requires jasny/bootstrap ~3.1.0 -> satisfiable by jasny/bootstrap[v3.1.3].
    - 2amigos/yii2-file-input-widget 1.0.1 requires jasny/bootstrap ~3.1.0 -> satisfiable by jasny/bootstrap[v3.1.3].
    - 2amigos/yii2-file-input-widget 1.0.2 requires jasny/bootstrap ~3.1.0 -> satisfiable by jasny/bootstrap[v3.1.3].
    - 2amigos/yii2-file-input-widget dev-master requires jasny/bootstrap ~3.1.0 -> satisfiable by jasny/bootstrap[v3.1.3].
    - 2amigos/yii2-file-input-widget 1.0.x-dev requires jasny/bootstrap ~3.1.0 -> satisfiable by jasny/bootstrap[v3.1.3].
    - Conclusion: don't install jasny/bootstrap v3.1.3
    - Installation request for 2amigos/yii2-file-input-widget * -> satisfiable by 2amigos/yii2-file-input-widget[0.1.0, 0.1.1, 0.1.2, 1.0.0, 1.0.1, 1.0.2, dev-master, 1.0.x-dev].

为什么?

好的,我明白了,为什么0.1.0–0.1.2的{​​{1}}版本无法安装 - 因为它们需要2amigos/yii2-file-input-widget的确切版本jasny/bootstrap,这与{{1}冲突3.1.0中的要求(因此作曲家澄清:>=3.1.3)。

但是,从常识来看,作曲家可以安装版本1.0.0或更高版本的composer.json(需要版本but these conflict with your requirements or minimum-stability的{​​{1}},这是3.1.3可以满足的) 。我没有看到将2amigos/yii2-file-input-widget 1.0.0+与jasny/bootstrap 3.1.3一起安装的任何障碍,作曲家也没有写任何关于它的明确澄清。它仍然说:~3.1.0 - 为什么?

解决方法1

它似乎适用于2amigos/yii2-file-input-widget

解决方法2

我实际上在前一段时间找到了另一种解决方法:我将jasny/bootstrap替换为Conclusion: don't install jasny/bootstrap v3.1.3,执行"prefer-stable": true然后将其替换回"2amigos/yii2-file-input-widget": "*"再次 - 它可行

问题是为什么它以如此奇怪的方式运作:为什么它有更多的限制,但失败的限制较少(没有澄清)。例如。如果它适用于"2amigos/yii2-file-input-widget": "1.0.2"(或使用prefer-stable),那么为什么它不适用composer update(或没有prefer-stable)?

2 个答案:

答案 0 :(得分:2)

更改顺序,它应该有效,例如

{
    "minimum-stability": "dev",
    "require": {
        "2amigos/yii2-file-input-widget": "*",
        "jasny/bootstrap": ">=3.1.3"
    }
}

为什么呢?我不知道。很可能是作曲家的错误。

我使用composer install命令(Composer v1.6.3)在空文件夹上测试了两个不同顺序的配置,原始订单失败,但上面的订单有效。我已在GH-7215报告此问题。

答案 1 :(得分:1)

问题可能在于您手动编辑composer.json然后运行

$ composer update

相反,请将更改还原为composer.json,然后运行:

$ composer require jasny/bootstrap:>=3.1.3
$ composer require "2amigos/yii2-file-input-widget:*"

或一气呵成:

$ composer require jasny/bootstrap:>=3.1.3 "2amigos/yii2-file-input-widget:*"

注意我建议避免将*通配符作为版本限制,因为它可能会引入该依赖项的任何版本,并可能通过引入不兼容的版本来破坏您的应用程序用它。

供参考,见: