Если я создам пустую папку и положу туда 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? Я что понимать в корне проблемы, или это просто баг композитора?