Yarn over NPMを使用する場合 違いは何ですか?


99

とNPMの違いは何ですか?この質問を書いているとき、私はインターネットでいくつかの記事を見つけることができるだけです。この

それらは同じ機能を持っていますか(Yarnはローカルキャッシュを実行し、パッケージを1回ダウンロードするだけでよいように見えます)が、これ以外にNPMからYarnに移行することの利点はありますか?


11
これは悪い質問ではなく、反対票に値しません。とはいえ、本当に良い質問になるには、少し具体化する必要があります。
jedd.ahyoung

簡単なGoogleがこれを確認します。これはおそらくStackOverflowには広すぎる/構成的ではないと思います。いずれにしても、もう少し調査を行うことで対応できるでしょう。
Aurora0001

1
@ Aurora0001検索してチートシートを見ましたが、それは私の質問に対する答えではありません!コマンドの違いではなく、2つの違いを知りたいです。最初に私の質問を読んでください
Asha

4
@Ashaより具体的にするために質問を編集し、すでに調査した内容を示す必要があります。どのような違いを見つけたいですか?ライブラリの実装方法を調べようとしていますか?問題への取り組みにおいて、それらがどのように異なるかを調べようとしていますか?質問をより正確にすると、何を求めているかによっては、それが良い場合があります。(質問内容によっては、情報が既にGoogleで入手できる場合があります。)
jedd.ahyoung

3
面白い人はそれをグーグルするようにあなたに言います。私はあなたの質問がグーグルに行くのを発見しました...スタックオーバーフローの人々は、それがそれらをより重要にするように、ものを過度に除外するようなものだと思います。
jairhumberto

回答:


67

更新:2018年3月(少し遅れ...)

バージョン5以降 npm

  • と呼ばれる「ロックファイル」を生成します package-lock.jsonヤーン(または他の)ロックメカニズムが行うのと同じ方法で依存関係ツリー全体を修正するロックファイルし、
  • ツールが作成されました
  • --save 今の意味 npm i
  • より良いネットワークとキャッシュの使用

さらに導入NPM 5.7.0npm ciパッケージのみをインストールすることで、継続的インテグレーション環境でより迅速に依存関係をインストールするためのコマンドがで見つかったpackage-lock.json(場合はエラーを報告package-lock.jsonし、がpackage.json同期していません)。

個人的にはまだ使っていますnpm


元の

私はドキュメントから直接引用するのが嫌いですが、彼らは理由を説明するのに素晴らしい仕事をしています。

主に:

  1. すべての開発マシンで同じものが得られることを常に知っています

  2. npmしない操作を並列化し、

  3. ネットワークをより効率的に使用できます。

  4. 他のシステムリソース(RAMなど)もより効率的に使用できます。

それを使った人々の制作経験は何ですか?誰もが知っている、それは一般大衆にとって乳児です。

Yehuda Katzからの TL; DR :

最初から、Yarnロックファイルは、同じリポジトリで繰返し実行されるyarnが同じパッケージになることを保証します。

次に、Yarnは、コールドキャッシュを使用して、特にウォームキャッシュを使用して、良好なパフォーマンスを実現しようとします。

最後に、Yarnはセキュリティをコアバリューにします。

素敵なブログ投稿

NPM vs Yarn Cheat Sheet ” by Gant Laborde

プロジェクトのやや長いバージョン:

高速:Yarnはダウンロードするすべてのパッケージをキャッシュするため、二度と必要ありません。また、操作を並列化してリソースの使用率を最大化するため、インストール時間がこれまでになく速くなります。

信頼性:詳細な、しかし簡潔なロックファイル形式、およびインストール用の確定的アルゴリズムを使用して、Yarnは1つのシステムで機能したインストールが他のシステムでもまったく同じように機能することを保証できます。

安全:Yarnはチェックサムを使用して、コードが実行される前に、インストールされているすべてのパッケージの整合性を検証します。

そしてREADME.mdから:

  • オフラインモード:以前にパッケージをインストールしたことがある場合は、インターネットに接続せずにパッケージを再インストールできます。
  • 確定的:インストールの順序に関係なく、すべてのマシンに同じ依存関係が同じ方法でインストールされます。
  • ネットワークパフォーマンス:Yarnはリクエストを効率的にキューに入れ、リクエストのウォーターフォールを回避して、ネットワークの使用率を最大化します。
  • 複数のレジストリ:npmまたはBowerからパッケージをインストールし、パッケージワークフローを同じに保ちます。
  • ネットワークの回復力:単一の要求が失敗しても、インストールは失敗しません。リクエストは失敗時に再試行されます。
  • フラットモード:依存関係の不一致バージョンを単一バージョンに解決して、重複の作成を回避します。
  • より多くの絵文字。🐈

糸がnpm v3のように依存関係を解決するかどうか教えていただけますか?各依存関係の1つのバージョンのみをインストールできる実際のフラット構造--flatを強制するオプションがあることを理解していますが、これに対するデフォルトの動作は何ですか?ありがとう。
Dimitris Karagiannis

2
その他の絵文字:cat:
Huei Tan

7
すばらしい答えです。彼らがフォークして名前を変更しての構文を変更する前にnpmへの貢献を試みたのだろうかinstall -g
ガードナービックフォード2017年


2

npm

  1. JavaScriptのパッケージマネージャー。npmは、npmエコシステムへのコマンドラインインターフェイスです。戦闘テストが行​​われ、驚くほど柔軟で、何十万ものJavaScript開発者が毎日使用しています。
  2. NPMは正しいロックファイルを生成しますが、Yarnロックファイルは破損している可能性があり、yarn-toolsで修正する必要があります

  1. JavaScriptの新しいパッケージマネージャー。Yarnはダウンロードするすべてのパッケージをキャッシュするため、二度と必要ありません。また、操作を並列化してリソースの使用率を最大化するため、インストール時間がこれまでになく速くなります。
  2. 糸はパスワードでのログインをサポートしていません(NPMはサポートしています)

1
どのようなログインですか?
リッチストーン

2

PNPMとは何ですか?

pnpmハードリンクとシンボリックリンクを使用して、モジュールの1つのバージョンをディスクに一度だけ保存します。たとえばnpmまたはYarnを使用する場合、同じバージョンのlodashを使用するプロジェクトが100ある場合、ディスクにはlodashのコピーが100あります。pnpmを使用すると、lodashはディスク上の1か所に保存され、ハードリンクはそれをインストールする必要があるnode_modulesに配置します。

その結果、ディスク上のギガバイトのスペースを節約し、インストールを大幅に高速化できます。pnpmが作成する一意のnode_modules構造と、Node.jsエコシステムで正常に動作する理由の詳細については、この小さな記事を読んでください。なぜpnpmを使用する必要があるのですか?

PNPMのインストール方法は?

npm install -g pnpm

PNPMを使用してnpmパッケージをインストールする方法

pnpm install -g typescript // or your desired package

利点PNPMを超えるYarnと、NPM

これはNPM、インストール時間を示す進行状況バーでYARNあり、PNPM(バーは短いほど優れています) ここに画像の説明を入力してください

クリックして完全なチェックベンチマーク

詳細については、https://www.npmjs.com/package/pnpmにアクセスしてください


1

Yarnを使用して(yarn add packagenameを使用して)パッケージをインストールすると、パッケージがディスクに配置されます。次回のインストール時に、レジストリからtarballを取得するためのHTTPリクエストを送信する代わりに、このパッケージが使用されます。

糸は便利なライセンスチェッカーが付属していますいます。これは、依存するすべてのモジュールのライセンスをチェックする必要がある場合に、非常に強力なものになります。

プロプライエタリソフトウェアを使用している場合は、どちらを使用しても問題はありません。npmを使用すると、npm-shrinkwrap.jsを使用できます。Yarnでは、yarn.lockを使用できます。

詳細については、次のブログをお読みください

https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/


1

初心者のためのより良い概要を提供しようとしています。

npmは歴史的に(2010)JavaScriptの最も人気のあるパッケージマネージャーです。これをプロジェクトの依存関係の管理に使用する場合は、次のコマンドを入力できます。

npm init

これによりpackage.jsonファイルが生成されます。プロジェクトのすべての依存関係が含まれています。

その後

npm install

ディレクトリnode_modulesを作成し、その中に依存関係(package.jsonファイルに追加したもの)をダウンロードします。

また、package-lock.jsonファイルを作成します。このファイルは、生成された依存関係のツリーを記述するために使用されます。これにより、開発者は同じ依存関係を完全にインストールできます。たとえば、開発者が依存関係をv2にアップグレードしてからv3にアップグレードし、別の開発者がv3に直接アップグレードすることを想像できます。

npmは依存関係を非決定的な方法でインストールします。つまり、2人の開発者が異なるnode_modulesディレクトリに異なる動作をする可能性があります。** 2018年2月など、npmは評判が悪かった:バージョン5.7.0でLinuxシステムでsudo npmを実行するとシステムファイルの所有権が変更され、オペレーティングシステムが永久に破壊されるという問題が見つかりました。

これらの問題などを解決するために、Facebookは新しいパッケージマネージャ導入(2016):より速く、より安全に、そしてより確実にするJavaScriptのマネージャーをパッケージ化。

次のように入力して、プロジェクトにを追加できます。

yarn init

これによりpackage.jsonファイルが作成されます。次に、依存関係を次のようにインストールします。

yarn install

フォルダnode_modulesが生成されます。Yarnはと呼ばれるファイルも生成しますyarn.lock。このファイルはと同じ目的を果たしますが、package-lock.json代わりに確定的で信頼性の高いアルゴリズムを使用して構築されるため、一貫性のあるビルドにつながります。

npmでプロジェクトを開始した場合、実際にはYarnに簡単に移行できます。糸は同じを消費しpackage.jsonます。詳細については、npmからの移行を参照してください。

ただし、npmは新しいリリースごとに改善されており、一部のプロジェクトでは、yarnよりnpmを使用しています。


1

@msanfordの回答はほぼすべてをカバーしていますが、セキュリティ(OWASPの既知の脆弱性)の部分が欠けています。

を使用してチェックできyarn auditますが、修正することはできません。これは、GitHub(https://github.com/yarnpkg/yarn/issues/7075)で未解決の問題です。

npm

を使用できるnpm audit fixので、一部は自分で修正できます。

二人とも、すなわちnpm audityarn audit自分自身の継続的インテグレーションツールを持っています。これらはそれぞれhttps://github.com/IBM/audit-ci(使用済み、問題なく動作します)とhttps://yarnpkg.com/package/audit-ci(未使用)です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.