では、 " replace "プロパティは composer でどのように機能しますか? composerドキュメントを読みましたが、まだ理解していません。詳細情報を検索しても質問に答えていません。
Githubで Laravel/Framework のcomposer.jsonファイルを見ると、置換がどのように機能するかわかりません。誰かがこれがどのように機能するか説明してくれますか?そして、変数「self.version」は何に等しくなりますか?
Composerのドキュメントには、2つの基本的な例があります。説明しようと思います。
このパッケージに置き換えられるパッケージをリストします。これにより、パッケージをフォークし、独自のバージョン番号を付けて別の名前で公開できます。元のパッケージを必要とするパッケージは、元のパッケージを置き換えるため、フォークで引き続き動作します。
ソフトウェアがoriginal/library
およびother/package
を使用していると仮定します。これらもoriginal/library
を必要とします。
original/library
は機能を統合する必要があると思いますが、メンテナーはあなたの提案をパッケージで行わせません。そのライブラリをbetter/library
という名前でフォークし、新しいリリースにタグを付けることにします。
ソフトウェアに戻ります。もちろんbetter/library
の使用を開始する必要があるため、代わりにそれが必要ですが、そのother/package
は依然としてoriginal/library
-コードの複製が必要です!フォークせずにcomposer.jsonを変更するだけで、代わりにbetter/library
を使用するように他のパッケージを作成するにはどうすればよいですか(まだoriginal/library
と互換性があるため、動作するはずです)。
composer.json
に置換キーを追加します:
"replace": {
"original/library":"1.0.2"
}
これでComposer=は、better/library
の依存関係を解決するときに、original/library
からのパッケージがother/package
と同等に優れていることを認識します。
これは、サブパッケージを含むパッケージにも役立ちます。たとえば、メインのsymfony/symfonyパッケージには、個々のパッケージとしても利用可能なすべてのSymfonyコンポーネントが含まれます。メインパッケージが必要な場合は、個々のコンポーネントが置き換えられるため、個々のコンポーネントのいずれかの要件を自動的に満たします。
同じ規則、わずかに異なる角度:フレームワークのコンポーネントを要求することは、何らかの機能を必要とする他のコンポーネントにとっては良いアプローチです。ただし、ソフトウェアに完全なフレームワークと、そのフレームワークのコンポーネントも必要とする別のライブラリが必要な場合、フレームワークのreplace
宣言により、Composer完全なフレームワークに既に含まれているため、その単一のコンポーネントを2回インストールします。
注意:置き換えられたバージョンのプレースホルダーは通常不良です
私の元の答えで私は提案しました:
"replace": {
"original/library":"1.*"
}
これには結果があります:Composerは、バージョンを修正したり、機能を追加したりバージョン1.2をリリースした場合でも、ライブラリバージョン1.0.0を元のライブラリのバージョン1.xと同等に処理します.34いつか。これは、other/package
いつかが更新されてoriginal/library:^1.1
を必要とする場合、[〜#〜] your [〜# 〜]ライブラリはまだアクティブで、内部で何も更新しなくても、任意のバージョン1.*
を置き換えることができると述べています。作業を行わずに元のライブラリを使用しますが、置換にはまさにこれが記載されています。
本質的には、置換バージョンではワイルドカードバージョンを使用しないでください。それらを使用する場合、あなたが知ることも予測することもできない未来についての声明を出します(original/library
を制御できない限り、しかしそれでも非常に注意してください)。常に知っている、完全に再実装できるoriginal/library
の特定のバージョンを使用してください。
独自のパッケージを作成するときは、composer.json
どの種類のパッケージがそれを行うか provide
これは基本的にComposerにパッケージが既にインストールされていることを伝えます、再インストールする必要はありません。
replace
property を使用すると、Composerは、パッケージが元のパッケージを独自のフォークに置き換えたいため、他のパッケージがそれをインストールする必要があります。
たとえば、a/a
パッケージにはb/b
そして、あなたはb/b
、Composer install
/update
にはダウンロードされません。
これについては、ここで詳しく説明します。 Composerで「置換」プロパティはどのように機能しますか?