35

package.json ファイルとインストール bash スクリプトを含むプロジェクトがあり、他の手順の中でnpm install.

スクリプトを更新して、yarn installが利用可能な場合に実行され (糸のキャッシュ、ロックファイルなどを利用するため)、それ以外の場合にフォールバックするように考えています。私が知る限り、すべてのパッケージがインストールされ、どちらの方法でも問題なく動作するようです。npm install

しかし、これが実行可能なアプローチになるのに十分な互換性がありますyarnか? npmまたは、これが引き起こす可能性のある潜在的な問題はありますか? 1つだけ選ぶつもりですか、それとも糸は実際にはnpmと交換可能ですか?

(注。この密接に関連する質問を読みましたが、プロジェクトで糸とnpmの両方のインストールプロセスを明示的にサポートすることに関するものであるため、これを別の質問として尋ねています)

4

1 に答える 1

32

Yarn と npm (バージョン >=3.0.0) は比較的互換性があり、特に npmからYarn に移行する必要があります。これは、互換性がYarn の目標の 1 つであるためです。npm からの移行で述べたように:

Yarn は npm と同じ package.json 形式を使用でき、npm レジストリから任意のパッケージをインストールできます。

したがって、理論的にpackage.jsonは、npm で有効なものは Yarn でも同様に機能するはずです。npm v2 はおそらく互換性が低いと言っていることに注意してください。これは、npm がネストされたnode_modules構造からフラット レイアウト (Yarn が使用するもの) に移行したためです。そうは言っても、リンクした問題で述べたように、Yarn と npm v3 は非常によく似たレイアウトを生成するはずです。

最初の概算として、互換性が必要な人のために、node_modules レイアウトとの互換性を十分に保つように努めるべきです。これが、ロングテールの互換性の問題を回避する可能性が最も高い方法だからです。

ただし、(名前が示すように) Yarn でのみサポートされており、互換性がないため、Yarn によって生成された Yarn.lock を利用することはできませnpm shrinkwrapん。

また、@RyanZim が指摘したように、古いバージョンの Yarn はインストール前およびインストール後のフックをサポートしていませんが、それ以降v0.16.1のバージョンではサポートしています。これらのフックに依存する場合は、必要なバージョンよりも大きいバージョンをユーザーに指定する必要がありますv0.16.1

要約すると、バグに遭遇せず、両方のパッケージ マネージャーで共有される機能のみを使用する限り、問題は発生しないはずです。

于 2016-11-21T18:20:32.277 に答える