次のチュートリアルコラムでは、Composer で依存関係の競合を回避するために replace 属性を使用する方法を紹介します。困っている友達の役に立つでしょう! Composer のドキュメントには 2 つの基本的な例が記載されています。
このパッケージによって置き換えられたパッケージをリストします。この方法では、パッケージをフォークして、独自のバージョン番号を持つ別の名前で公開することができ、元のパッケージが置き換えられるため、元のパッケージを必要とするパッケージはフォークされたパッケージを引き続き使用できます。
ソフトウェアでother/packageoriginal/library
と
が使用されており、これらには original/library
が必要であるとします。 あなたは、
original/library
に新しい機能を統合する必要があると考えていますが、メンテナはパッケージに実装するというあなたの提案に同意しません。そこで、
という名前でライブラリをフォークし、新しいリリースとしてマークすることにしました。 ソフトウェアに戻ります。もちろん、
better/library
パッケージの使用を開始する必要があるため、代わりにそれを使用しますが、
には依然として original/library
- コードの重複が必要です。そのパッケージで original/library
の代わりに better/library
を使用するにはどうすればよいですか?それをフォークして、composer.json を変更するだけではなく (original/library
と互換性があるため、動作するはずです)? composer.json
に replace キーワードを追加する必要があります:
"replace": { "original/library":"1.0.2" }
これで、Composer は、「other/package」の依存関係を解決するときに、「」からの変更がすべて認識されるようになりました。より優れた「/library」パッケージは、「original/library」と同じくらい優れています。
同じルールですが、視点が少し異なります。フレームワークのコンポーネントを取り込むことは、何らかの機能を必要とする他のコンポーネントに適した方法です。ただし、ソフトウェアに完全なフレームワークが必要で、別のライブラリがそのフレームワークのコンポーネントを必要とする場合、フレームワークのreplace
宣言により、Composer はその 1 つのコンポーネントを 2 回インストールする必要がなくなります。これは、そのコンポーネントがすでに完全なコンポーネントに含まれているためです。フレーム。
注: 置換バージョンのプレースホルダーは一般的に悪いです
私の最初の回答では、次のように提案しました: "replace": {
"original/library":"1.*"
}
これ 結果は次のとおりです: Composer は次のようになります。いつか何かが修正されたり機能が追加されてバージョン 1.2.34 がリリースされたとしても、ライブラリのバージョン 1.0.0 は元のライブラリのバージョン 1.x と同じように扱ってください。これは、ある日、「other/package」が更新され、「original/library:^1.1」が必要になった場合、
ライブラリ内の置換はまだアクティブであり、任意のバージョン # で置換できると宣言していることも意味します。 ##1*
、たとえ内部的に何も更新しなかったとしても、更新は行われませんが、何も作業しなければ、古いコードは元のライブラリの新しい機能を実装することはありません。しかし、置き換えられたコンテンツはまさにそれを示しています。つまり、本質的には、置換バージョンでワイルドカード バージョンを使用することは避けてください。これらを使用すると、知ることも予測することもできない未来についての発言をすることになります ( original/library を制御できない場合は別ですが、それでも十分注意してください)。既知で完全に再実装できる
original/library
元のアドレス: https://stackoverflow.com/questions/18882201/how-does-the-replace-property-work-with-composer
翻訳アドレス: https: //learnku.com/laravel/t/55200
以上がComposer の依存関係の競合を回避するには、replace 属性を使用します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。