実際に、受け入れられるバージョンが過度に制限されているサブ依存関係がある場合は、yarn を使用してそれらをオーバーライドできます。
更新された編集: Yarn は現在、1.0 の時点で、「解像度」ブロックを正式にサポートしています。したがって、解像度をオーバーライドする方法は、次のようなブロックを に追加するだけですpackage.json:
"resolutions": {
"package-a": "2.0.0",
"package-b": "5.0.0",
"package-c": "1.5.2"
}
「互換性のない」バージョンの警告が表示されることがありますが、一部のパッケージ (socket.io など) は受け入れるバージョンが過度に制限されていることがわかりました。したがって、実際に壊れていない場合は喜んで最新バージョンを選択します。もの。
以下のオリジナルだが時代遅れの回答。
元の質問は正確には正しくないように思えますが、実際には元の質問は私が答えたかったものであり、答えを見つけたので、ここに後世のためのものがあります:
私は socket.io ライブラリを使用していますcomponent-emitterが、依存関係があります。ただし、必要なバージョンのペアがあります。これは、何かを変更する前の yarn.lock ファイルの外観です。
component-emitter@1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3"
component-emitter@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe"
そのため、クライアント コードにコンポーネント エミッターの 2 つのコピーが含まれていました。私が調べたところ、1.1.2 と 1.2.0 (または最新の 1.2.1) の間に重大な変更はないようでした。最初に yarn.lock ファイルを変更してみました:
component-emitter@1.2.1, component-emitter@^1.2.1, component-emitter@1.1.2:
version "1.2.1"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
これは機能しましたが、ファイルには自動生成に関する警告があり、追加するすべての更新または新しいパッケージがこの変更を踏みにじることを意味します。少し検索yarn --flatすると、yarn がプロジェクト全体で各パッケージを 1 つしか選択しないようにするオプションが見つかりました。古いパッケージと新しいパッケージの間に互換性がないという実際のケースがあると確信しているので、それはやり過ぎのように思えます。ダウンロードを小さくするために、クライアント コードから冗長なパッケージを削除したかっただけです。私はまだ開発パッケージがすべて正しく動作することを望んでいます。
しかし、yarn --flatのドキュメントで、package.json に入れることができる「解像度」ブロックへの参照を見つけました。
"resolutions": {
"package-a": "2.0.0",
"package-b": "5.0.0",
"package-c": "1.5.2"
}
そこで"component-emitter" : "1.2.1"、package.json に新しい「解像度」ブロックを入れてみました。実際、必要なすべての場所で component-emitter が 1.2.1 にフラット化され、クライアント コードに 1 つのコピーしかありません。
(そして、resolutionsブロックは で完全にサポートされるyarnようになったため、 を使用する必要さえありません--flat。)