空のフォルダーを作成してそこに composer.json を配置すると:
{
"require": {
"silex/silex": "1.0.*@dev"
}
}
実行すると、composer install
正常に動作し、マイクロフレームワーク silex とそのすべての要件がベンダー フォルダーにインストールされます。Ok。
なぜうまくいかないのか理解できない、より複雑な例です。私自身の「ある種のフレームワーク」(「light/light4」と呼ばれる)に依存するプロジェクト(「FB」と呼ばれる)があります。FB プロジェクトの composer.json:
{
"repositories":[
{
"type":"hg",
"url":"http://bitbucket.org/pqr/light4"
}
],
"require":{
"light/light4":"dev-default"
}
}
ご覧のとおり、bitbucket でホストされている私のフレームワーク 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"
、デフォルトですべてのパッケージが安定したバージョンにインストールされると仮定します。light/light4 で必要な silex/silex を除く"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"
、FB プロジェクトの一般的な composer.json に入れるようアドバイスしました。私は試してみました-そして今では動作します:安定したバージョンにインストールされたすべてのパッケージと、必要に応じてdevバージョンの唯一のサイレックス/サイレックス。今、私は完全に混乱しています。
疑問はまだあります - 一般的な composer.json で機能し、ネストされた (必須の) プロジェクト light/light4 では機能しないのはなぜですか? 問題の根本を理解するにはどうすればよいですか、それともコンポーザーの単なるバグですか?