2

空のフォルダーを作成してそこに 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 では機能しないのはなぜですか? 問題の根本を理解するにはどうすればよいですか、それともコンポーザーの単なるバグですか?

4

1 に答える 1

2

ドキュメントが言うように:「requireおよびrequire-devはさらに安定性フラグをサポートします(ルートのみ)」

これらのフラグは、ルート パッケージからのみ読み取られます ( root-only の定義を参照)。これは、プロジェクトがパッケージの安定性を完全に制御できるようにするためです。依存関係の一部が不安定なものに依存している場合、これは明らかに問題ですが、composer で利用可能な安定版リリースがますます多くのパッケージにあるため、状況は改善されるはずです。

于 2012-11-10T20:05:56.597 に答える