219

いくつかの依存関係があるプロジェクトがあり、別のプロジェクトをインストールしたいのですが、他のプロジェクトはそのままにしておきたいです。を編集しましたcomposer.jsonが、を実行するcomposer installと、次の出力が得られます。

Installing dependencies from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.

Problem 1
    - laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
    - laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
    - Installation request for laravel/framework dev-master -> satisfiable by laravel/framework dev-master.

まず、mcryptをインストールしているので、なぜそこに文句を言っているのかわかりません。

では、どうすればこの新しい依存関係をインストールできますか?

私のcomposer.json:

{
    "require": {

        "opauth/opauth": "*",
        "opauth/facebook": "*",
        "opauth/google": "*",
        "opauth/twitter": "*",

        "imagine/Imagine": "dev-develop",

        "laravel/framework": "4.*",
        "loic-sharma/profiler": "dev-master"
    },
    "autoload": {
        "classmap": [
            "app/libraries",
            "app/commands",
            "app/controllers",
            "app/models",
            "app/database/migrations",
            "app/tests/TestCase.php"
        ]
    },
    "minimum-stability": "dev"
}
4

5 に答える 5

327
于 2013-03-05T09:03:34.950 に答える
31

実際、正しい解決策は次のとおりです。

composer require vendor/package

ComposerのCLI ドキュメントから取得:

このコマンドは、現在のディレクトリから新しいパッケージをファイルrequireに追加します。composer.json

php composer.phar require

要件を追加/変更すると、変更された要件がインストールまたは更新されます。

要件を対話的に選択したくない場合は、それらをコマンドに渡すことができます。

php composer.phar require vendor/package:2.* vendor/package2:dev-master

composer updatecomposer.json で見つかった新しいパッケージをインストールするのは事実ですが、composer.json で見つかったファジー ロジック (またはコロンの後の文字)に従って、composer.lock ファイルとインストールされたパッケージも更新します! これは を使用することで回避できますが、これを習慣にすることはお勧めしません。壊れている可能性のあるプロジェクトから離れた 1 つの忘れられた議論になるからです…</p> >*composer update vendor/package

物事を正気に保ちcomposer require vendor/package、新しい依存関係を追加するために固執してください!

于 2014-08-20T05:57:31.587 に答える
3

私のユースケースはよりシンプルで、あなたのタイトルだけに適合しますが、それ以上の詳細には適合しません.

つまりcomposer.json、他のすべてのパッケージを更新せずに、まだ私の中にない新しいパッケージをインストールしたいのです。

ここでの解決策はcomposer require x/y

于 2014-06-09T21:50:29.290 に答える
1

私の場合、次のレポがありました。

  • 要件 A、B、C、D.json
  • ただし、A、B、C のみ.lock

その間、A、B、C には、ロックが生成された時点でより新しいバージョンがありました。

composer install何らかの理由で、「ベンダー」を削除して、次のメッセージで失敗したかったのです。

Warning: The lock file is not up to date with the latest changes in composer.json.
You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.

私はSeldaekからソリューションを実行しようとしましたcomposer update vendorD/libraryDが、作曲家はもっと多くのものを更新することを主張したので、.lockあまりにも多くの変更が私のgitツールに見られました.

私が使用した解決策は次のとおりです。

  1. すべてのディレクトリを削除しますvendors
  2. VendorD/LibraryDから要件を一時的に削除します.json
  3. 実行しcomposer installます。
  4. 次に、ファイル.jsonを削除し、リポジトリから再度チェックアウトします (ファイルを再度追加するのと同じですが、潜在的な空白の変更を回避します)。
  5. 次に、Seldaek のソリューションを実行しますcomposer update vendorD/libraryD

ライブラリをインストールしましたが、さらに、他のものを編集せずに新しいものだけが追加されたことgitを diff が示しました。.lock

(ポインターの Thnx Seldaek ;) )

于 2014-03-29T20:14:45.763 に答える