web-dev-qa-db-ja.com

実際には、yarnとnpmは交換可能ですか?

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

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

yarnnpmは、これが実行可能なアプローチになるのに十分交換可能ですか?または、これがもたらす可能性のある潜在的な問題はありますか?私たちはただ1つを選ぶつもりですか、それとも実際には糸はnpmと交換可能ですか?

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

21
Nick F

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

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

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

最初の近似では、その互換性を必要とする人のために、node_modulesレイアウトとの互換性を最大限に保つようにする必要があります。これは、ロングテール互換性の問題を回避するための最も可能性の高い方法だからです。

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

また、@ RyanZimで言及されているように、古いバージョンのYarnは インストール前およびインストール後のフック をサポートしていませんが、 v0.16.1より後のバージョン はサポートしています。これらのフックを使用する場合は、v0.16.1よりも新しいバージョンが必要であることをユーザーに指定する必要があります。

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

13
Aurora0001