silex/silex 1.0.*@dev -› подходящий пакет не найден

Если я создам пустую папку и положу туда composer.json:

{
    "require": {
        "silex/silex": "1.0.*@dev"
    }
}

а затем запустить composer install - все работает нормально, микрофреймворк силекс и все его требования будут установлены в папку поставщика. Ok.

Теперь более сложный пример, который я не могу понять, почему он не работает. У меня есть проект (называемый "FB"), который зависит от моего собственного "какого-то фреймворка" (называемого "light/light4"). composer.json проекта FB:

{
    "repositories":[
        {
            "type":"hg",
            "url":"http://bitbucket.org/pqr/light4"
        }
    ],
    "require":{
        "light/light4":"dev-default"
    }
}

Как видите, это зависит от моего фреймворка light/light4, размещенного на битбакете. Затем light/light4 composer.json:

{
    "name":"light/light4",
    "version":"1.0.0",
    "require":{
        "php":">=5.4.0",
        "silex/silex": "1.0.*@dev",
        "twig/twig":">=1.8,<2.0-dev",
        "monolog/monolog":">=1.0.0",
        "symfony/validator":"2.1.*",
        "symfony/console":"2.1.*"
    },
    "autoload":{
        "psr-0":{
            "Light":"src/"
        },
        "files":[
            "src/functions/body.php", "src/functions/db.php", "src/functions/file.php", "src/functions/misc.php"
        ]
    }
}

light/light4 зависит от silex/silex и некоторых других вещей.

Поскольку я никогда не упоминал "minimun-stability":"dev" - предположим, что все пакеты по умолчанию будут установлены для стабильных версий. За исключением силекса/силекса, требуемого по свету/свету4 как "silex/silex": "1.0.*@dev"

К сожалению, когда я запускаю composer -v install в корневом проекте (FB), я получаю следующую ошибку:

Loading composer repositories with package information
Reading composer.json of light/light4 (default)
Importing branch default (dev-default)
Installing dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - light/light4 dev-default requires silex/silex 1.0.*@dev -> no matching package found.
    - light/light4 dev-default requires silex/silex 1.0.*@dev -> no matching package found.
    - Installation request for light/light4 dev-default -> satisfiable by light/light4 dev-default.

Potential causes:
 - A typo in the package name
 - The package is not available in a stable-enough version according to your minimum-stability setting
   see <https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion> for more details.

Read <http://getcomposer.org/doc/articles/troubleshooting.md> for further common problems.

silex/silex 1.0.*@dev -> no matching package found - ПОЧЕМУ??? Это работает для простого пустого проекта, но не работает для цепочки требований :(

Кто-то из composer-dev irc посоветовал поместить "silex/silex": "1.0.*@dev" в общий composer.json проекта FB. Попробовал - и теперь работает: все пакеты установились в стабильных версиях и только silex/silex в dev версии, как я и хотел. Теперь я совсем запутался.

Остается вопрос - почему он работает в общем composer.json и не работает во вложенном (обязательном) проекте light/light4? Я что понимать в корне проблемы, или это просто баг композитора?


person Petr    schedule 10.11.2012    source источник


Ответы (1)


Как сказано в документах: "require и require-dev дополнительно поддерживают флаги стабильности (только рут)"

Эти флаги считываются только из корневого пакета (см. определение только для root), потому что таким образом он дает вашему проекту полный контроль над стабильностью пакетов. Очевидно, что это проблема, когда некоторые из ваших зависимостей полагаются на нестабильные вещи, но эта ситуация должна улучшиться, поскольку все больше и больше пакетов имеют стабильные выпуски, доступные для композитора.

person Seldaek    schedule 10.11.2012