9

私は新しいプロジェクトとコンポーザーを使用した Symfony 2 の依存関係に悩まされています。

最初のいくつかの状況では、composer を使用して symfony/framework-standard-edition v2.1.5 をインストールします。これにより、これらの要件を持ち、最小安定性ノードを持たないコンポーザ ファイルが生成されます。

"require": {
  "php": ">=5.3.3",
  "symfony/symfony": "2.1.*",
  "doctrine/orm": ">=2.2.3,<2.4-dev",
  "doctrine/doctrine-bundle": "1.0.*",
  "twig/extensions": "1.0.*@dev",
  "symfony/assetic-bundle": "2.1.*",
  "symfony/swiftmailer-bundle": "2.1.*",
  "symfony/monolog-bundle": "2.1.*",
  "sensio/distribution-bundle": "2.1.*",
  "sensio/framework-extra-bundle": "2.1.*",
  "sensio/generator-bundle": "2.1.*",
  "jms/security-extra-bundle": "1.2.*",
  "jms/di-extra-bundle": "1.1.*",
  "kriswallsmith/assetic": "1.1.*@dev"
},

これは問題なく動作し、想定どおりにすべての最新の安定バージョンがインストールされます。

次に、バンドルを追加します -> https://packagist.org/packages/kunstmaan/admin-bundle

"require": {
  "php": ">=5.3.3",
  "symfony/symfony": "2.1.*",
  "doctrine/orm": ">=2.2.3,<2.4-dev",
  "doctrine/doctrine-bundle": "1.0.*",
  "twig/extensions": "1.0.*@dev",
  "symfony/assetic-bundle": "2.1.*",
  "symfony/swiftmailer-bundle": "2.1.*",
  "symfony/monolog-bundle": "2.1.*",
  "sensio/distribution-bundle": "2.1.*",
  "sensio/framework-extra-bundle": "2.1.*",
  "sensio/generator-bundle": "2.1.*",
  "jms/security-extra-bundle": "1.2.*",
  "jms/di-extra-bundle": "1.1.*",
  "kriswallsmith/assetic": "1.1.*@dev",
  "kunstmaan/admin-bundle": "dev-master"
},

このバンドルは、「dev-master」( https://packagist.org/packages/doctrine/doctrine-fixtures-bundle )の「doctrine/doctrine-fixtures-bundle」に依存します。

そして、そのバンドルは * を含む doctrine/data-fixtures に依存します ( https://packagist.org/packages/doctrine/data-fixtures )

プロジェクトで composer update を実行すると、doctrine/data-fixtures の依存関係を満たすものは何もないことがわかります。名前のタイプミスか、最小安定性がデフォルトで安定しているため、利用可能な「安定した」バージョンがありません。

doctrine-fixtures-bundle を「dev」安定性にインストールする必要があります。これは、dev-master を配置すると、この依存関係が自動的に「dev」安定性に置かれるためです。しかし、これはこの dep の dep に対しては何もしません。それが私の最小安定性であるため、彼らは安定してインストールしたいと考え続けています。

この時点で、doctrine/data-fixtures: dev-master または @dev をプロジェクトの composer.json に追加することで、これを修正できます。

ただし、これは 1 つの例 (knpmenubundle、fosuserbundle など) にすぎないため、自分のコンポーザー ファイルにインストールされない deps のすべての deps を手動で追加する必要があります。

別の解決策は、私のプロジェクトの最小限の安定性を dev にドロップすることですが、その時点で、Symfony2 のような安定したものを含むすべての deps は、タグ付けされたリリースではなく、開発バージョンをインストールします。

4

1 に答える 1

14

これを回避する唯一の良い方法があります: より多くのリリースにタグを付けるよう人々に小言を言うことです。本当に不安定なものを扱う必要"@dev"がある場合は、require ですべてをホワイトリストに登録するのが最良の代替 IMO です。安定版よりも不安定版の方が多い場合は、いつでも@stable最小安定性を dev にタグ付けして設定できます。ほとんどの場合、あなたのお尻を保存するためのロックファイルがまだあります;)

于 2012-12-20T11:41:33.733 に答える