ホームページ >開発ツール >composer >Composer の依存関係の競合を回避するには、replace 属性を使用します。

Composer の依存関係の競合を回避するには、replace 属性を使用します。

藏色散人
藏色散人転載
2021-03-12 11:28:593892ブラウズ

次のチュートリアルコラムでは、Composer で依存関係の競合を回避するために replace 属性を使用する方法を紹介します。困っている友達の役に立つでしょう! Composer のドキュメントには 2 つの基本的な例が記載されています。

このパッケージによって置き換えられたパッケージをリストします。この方法では、パッケージをフォークして、独自のバージョン番号を持つ別の名前で公開することができ、元のパッケージが置き換えられるため、元のパッケージを必要とするパッケージはフォークされたパッケージを引き続き使用できます。

ソフトウェアで

original/library

other/package

が使用されており、これらには original/library が必要であるとします。 あなたは、original/library に新しい機能を統合する必要があると考えていますが、メンテナはパッケージに実装するというあなたの提案に同意しません。そこで、

better/library

という名前でライブラリをフォークし、新しいリリースとしてマークすることにしました。 ソフトウェアに戻ります。もちろん、better/library パッケージの使用を開始する必要があるため、代わりにそれを使用しますが、

other/package

には依然として 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」と同じくらい優れています。

これは、サブパッケージを含むパッケージにも役立ちます。たとえば、メインの symfony/symfony パッケージには、別個のパッケージとしても利用できるすべての Symfony コンポーネントが含まれています。メイン パッケージが必要な場合は、個別のコンポーネントの 1 つが置き換えられるため、その要件が自動的に満たされます。

同じルールですが、視点が少し異なります。フレームワークのコンポーネントを取り込むことは、何らかの機能を必要とする他のコンポーネントに適した方法です。ただし、ソフトウェアに完全なフレームワークが必要で、別のライブラリがそのフレームワークのコンポーネントを必要とする場合、フレームワークの

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 サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。