[解決済み] yarn` でネストされた依存性を上書きするには?
質問
私のパッケージが以下の依存関係を持っている場合
{ "name": "my-package",
"dependencies": { "foobar":"~1.0.3", "baz":"2.0.9" }
そして、その
foobar
パッケージには以下の依存関係があります。
{ "name": "foobar",
"dependencies": { "baz":"^2.0.0" }
と、最近リリースされたバージョンの
baz
は
2.1.0
の最初の実行は
yarn
をインストールします。
[email protected]
で
foobar/node_modules
.
どのようにすれば、yarn が強制的に
[email protected]
パッケージで
foobar
?
私の理解では、これは
npm shrinkwrap
(ラ
この質問
).
私の質問の要約は、おそらく Yarnは反復可能で決定論的なインストールを作成しますが、そのインストールをどのようにカスタマイズすればよいのでしょうか?
どのように解決するのですか?
実際に、どのバージョンを受け入れるかについて過度に制限しているサブ依存関係がある場合、次のようにします。 ができます。 yarn を使ってそれらを上書きすることができます。
UPDATED EDITです。
1.0からYarnになりました。
を正式にサポートしました。
を公式にサポートしています。ですから、resolutionを上書きする方法は、以下のようなブロックを
package.json
:
"resolutions": {
"package-a": "2.0.0",
"package-b": "5.0.0",
"package-c": "1.5.2"
}
時々、互換性のないバージョンの警告が出ますが、いくつかのパッケージ (socket.io など) は を超える しかし、いくつかのパッケージ (socket.io など) は、受け入れるバージョンを過度に制限しているため、実際に物事を壊さない場合は、喜んで最新バージョンを選択します。
オリジナルの、しかし古くなった回答を以下に示します。
元の質問が正確でなかったようですが、元の質問 は は、私が答えて欲しかったもので、答えを見つけたので、後学のためにここに掲載します。
私はsocket.ioライブラリを使用していて、それには
component-emitter
を依存関係として持っています。しかし、それは必要とするバージョンのペアを持ちます。これは私が何かを変更する前のyarn.lockファイルがどのようなものであったかを示しています。
[email protected]:
version "1.1.2"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3"
[email protected]:
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 ファイルを変更することだけを試みました。
[email protected], component-emitter@^1.2.1, [email protected]:
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" ブロックへの参照を発見しました。
"resolutions": {
"package-a": "2.0.0",
"package-b": "5.0.0",
"package-c": "1.5.2"
}
ということで、試しに
"component-emitter" : "1.2.1"
をパッケージ.json の新しい "resolutions" ブロックに置いてみたところ、実際に component-emitter をそれを必要とするすべての場所で 1.2.1 にフラット化し、今では私のクライアント コードに 1 つだけコピーが存在することになりました。
(そして今
resolutions
ブロックが完全にサポートされ
yarn
で完全にサポートされています。
--flat
.)
関連
-
[解決済み】MongoClient v3.0使用時、db.collectionは関数ではない
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] npm package.jsonファイルのdependencies, devDependencies, peerDependenciesの違いは何ですか?
-
[解決済み] package.jsonの各依存関係を最新バージョンに更新する方法は?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsを完全にアンインストールして、最初から再インストールする方法 (Mac OS X)
-
[解決済み] sudoを使わずにnpmがエラーを投げるのを修正する方法
-
[解決済み] Node.jsのnpmモジュールをアンインストールするにはどうすればよいですか?
-
[解決済み] NPMパッケージの以前の正確なバージョンをインストールするにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】MongoClient v3.0使用時、db.collectionは関数ではない
-
[解決済み】ブロックスコープの宣言は、ストリクトモード以外ではまだサポートされていません。
-
[解決済み] AWS lambda function error - Unable to import module 'index': エラー
-
[解決済み] npm install エラー - ローカルの発行者証明書を取得できません。
-
[解決済み] Heroku "状態が起動から停止に変更されました SIGTERMで全プロセスを停止"
-
[解決済み] のエラーが発生しました。これはおそらくnpmの問題ではありません。上に追加のログ出力があると思われます
-
[解決済み] express は `body-parser deprecated undefined extended` としてエラーを投げます。
-
[解決済み] node.js - リクエスト - "emitter.setMaxListeners() "はどのように?
-
[解決済み] ネストされたNPM依存性のバージョンを上書きするにはどうすればよいですか?