はじめに
YarnとNPMは、最も人気のあるNode.jsパッケージマネージャーの2つです。 JavaScriptで開発するときに、パッケージのダウンロード、インストール、および管理が可能です。
このチュートリアルでは、YarnとNPMを比較し、それらのパフォーマンス、使いやすさ、セキュリティ、およびそれらが提供する機能について検討します。

ヤーンvs.NPM:定義
ヤーン(さらに別のリソースネゴシエーター) およびNPM(ノードパッケージマネージャー) JavaScriptコーディングに使用されるパッケージマネージャーです。 Node.jsで動作します 、これは、ユーザーがWebブラウザーの外部でJavaScriptコードを開発および実行するのに役立ちます。
Node.jsは、多数のオープンソースパッケージとライブラリを使用して、コーディングをより簡単かつ効率的にします。 YarnやNPMなどのパッケージマネージャーを使用すると、ユーザーはパッケージ、ライブラリ、依存関係を簡単にインストール、管理、更新、削除できます。
糸とは何ですか?
Facebookは、NPMの代わりとして2016年にYarnを開発しました。当時NPMに欠けていたより高度な機能(バージョンロックなど)を提供し、より安全で安定した効率的な製品を作成するように設計されました。
ただし、Yarnがリリースされてから、NPMはいくつかの重要な機能を追加しました。現在の状態では、YarnはNPMに代わるものではなく、代替品になっています。
NPMとは何ですか?
NPMは、Node.jsパッケージのインストール、管理、および削除を支援するCLIツールを備えたNode.jsのデフォルトのパッケージマネージャーです。また、ユーザーはオープンソースのNode.jsパッケージを共有できます。
YarnとNPM:比較
以下は、YarnとNPMの類似点と相違点の概要です。
インストール
まず、YarnとNPMのインストールプロセスを比較します。
糸
Yarnの使用を開始するには、公式WebサイトのMSIインストーラー、またはChocolatey、Scoop CLI、NPM自体などのパッケージマネージャーを使用してインストールする必要があります。詳細については、WindowsにYarnをインストールし、Ubuntu18.04にYarnをインストールするためのガイドをご覧ください。
NPM
NPMはデフォルトでNode.jsのインストールに含まれており、インストールするために追加の手順は必要ありません。 Node.jsとNPMのインストールの詳細については、ガイドの1つをご覧ください:
- Ubuntu18.04および20.04にNode.jsとNPMをインストールする方法
- CentOS7にNode.jsとNPMをインストールする方法
- WindowsにNode.jsとNPMをインストールする方法
- MacにNode.jsとNPMをインストールする方法
依存関係
糸
Yarnバージョン1とNPMはどちらも、非常によく似た方法で依存関係を管理します。どちらもプロジェクトのメタデータをpackage.jsonに保存します node_modulesにあるファイル プロジェクトディレクトリ内のフォルダ。
バージョン2以降、Yarnは node_modulesを使用しなくなりました 依存関係を追跡するフォルダー。代わりに、Yarn2.0はPlug'n'Playを使用します 単一の.pnp.cjsを生成する機能 ファイル。このファイルには、プロジェクトの依存関係階層のマップが含まれています。
毛糸はyarn
を使用します 依存関係をインストールするコマンド。依存関係を並行してインストールし、同時に複数のファイルを追加できるようにします。
依存関係をインストールすると、プロジェクトで使用される依存関係の正確なリストを保存するロックファイルが自動的に作成されます。 Yarnの場合、このファイルは yarn.lockと呼ばれます。 。
NPM
NPMは、 npm install
を使用して依存関係をインストールします 指図。依存関係は順番にインストールされます。
NPMは、 package-lock.jsonという名前のバージョンロックファイルも作成します 。 Yarnはpackage-lock.jsonもサポートしています ファイル、ユーザーがバージョンデータをNPMからYarnに移行できるようにします。
速度とパフォーマンス
前述のように、NPMは依存関係パッケージを順番にインストールしますが、Yarnは並行してインストールします。このため、大きなファイルをインストールする場合、YarnはNPMよりも高速に実行されます。
どちらのツールにも、依存関係ファイルをオフラインキャッシュに保存するオプションがあります。これにより、ユーザーはオフラインの場合でも依存関係をインストールできます。
さらに、バージョン2以降、Yarnはゼロインストールを使用します 特徴。この機能は、 .pnp.cjsから依存関係マップを取得します ファイルを作成し、それを使用して、実質的に遅延がゼロのオフライン依存関係インストールを実行します。

セキュリティ
糸
Yarnは、パッケージのダウンロード中にバックグラウンドプロセスとしてセキュリティチェックを実行します。パッケージライセンス情報を使用して、悪意のあるスクリプトをダウンロードしたり、依存関係の競合を引き起こしたりしないようにします。
どちらのツールも暗号化プロトコルを使用して、安全なデータ転送を保証します。 Yarnはチェックサムでパッケージを検証しますが、NPMは package-lock.json に保存されているSHA-512(セキュアハッシュアルゴリズム)を使用します ファイル。
NPM
NPMの初期のバージョンでは、セキュリティの脅威が重大な問題でした。バージョン6以降、NPMはパッケージをインストールするたびにセキュリティ監査を実行します。これにより、脆弱性を防ぎ、依存関係の競合が発生しないようにします。
npm audit
を使用して手動監査を実行することもできます 指図。 NPMが脆弱性を発見した場合は、npm audit fix
を使用します 問題を解決する必要があります。
使いやすさ
YarnとNPMはどちらも、特にいくつかのコマンドを共有していることを考えると、比較的使いやすいです。コマンド出力は一般的に読みやすく理解しやすいものですが、多数のパッケージをインストールすると視覚的に区別できなくなる可能性があります。
どちらのパッケージマネージャーも、ユーザーが新しいプロジェクトを設定するのに役立つインタラクティブモードを提供します。 Yarnでは、このモードはデフォルトで有効になっていますが、NPMでは npm-upgradeが必要です 双方向性を有効にするパッケージ。

機能
YarnとNPMには、いくつかの共通の重要な機能があります。
- ロックファイルの生成: 両方のパッケージマネージャーが自動的にバージョンロックファイルを作成します。 Yarnの場合、このファイルは yarn.lockと呼ばれます。 、NPMがファイルに package-lock.jsonという名前を付けている間 。
- ワークスペースの使用: YarnとNPMはどちらもワークスペースをサポートしているため、単一のリポジトリを使用して複数のプロジェクトの依存関係を管理できます。
- リモートスクリプト: NPMとYarnはどちらも、
npx
を使用して、スクリプトをリモートで実行できます。 NPMのコマンドとyarn dlx
ヤーンのコマンド。
機能はYarn専用です:
- プラグアンドプレイ: node_modulesを使用する代わりに フォルダ、Yarnは単一の .pnp.cjsを生成します プロジェクトの依存関係をマップするファイル。これにより、依存関係ツリーがより最適化され、プロジェクトの起動とパッケージのインストールが高速化されます。
- ゼロインストール: この機能は、プラグアンドプレイと連携しています。 、 .pnp.cjsを使用 オフラインキャッシュに保存されているパッケージをマップするファイル。これにより、保存されているパッケージにほとんど遅延なくアクセスしてインストールできます。
- ライセンスチェック: Yarnは、パッケージをダウンロードおよびインストールするときに、組み込みのライセンスチェッカーを備えています。

コマンド
次の表に、NPMとYarnで最も頻繁に使用されるコマンドの概要を示します。
コマンド | NPM | 糸 |
---|---|---|
プロジェクトを初期化する | npm init | yarn init |
現在のパッケージのテストを実行する | npm test | yarn test |
古いパッケージを確認する | npm outdated | yarn outdated |
パッケージを公開する | npm publish | yarn publish |
スクリプトを実行する | npm run | yarn run |
ローカルパッケージキャッシュの管理 | npm cache clean | yarn cache clean |
ログインまたはログアウト | npm login/logout | yarn login/logout |
依存関係のインストール | npm install | yarn |
パッケージのインストール | npm install [package name] | yarn add [package name] |
パッケージをアンインストールする | npm uninstall [package name] | yarn remove [package name] |
更新マネージャー | npm update | yarn upgrade |
パッケージの更新 | npm update [package name] | yarn upgrade [package name] |
パッケージをグローバルにインストールする | npm install --global [package name] | yarn global add [package name] |
パッケージをグローバルにアンインストールする | npm uninstall --global [package name] | yarn global remove [package name] |
インタラクティブな依存関係の更新 | npm run upgrade-interactive | yarn upgrade-interactive |
パッケージをリモートで実行 | yarn dlx | |
ライセンスを確認する | yarn licenses ls |
ヤーンvs.NPM:選択方法
どちらを使用するかを決定する際には、NPMとYarnの両方の長所と短所を考慮することが不可欠です。
毛糸
利点
- 並列インストールとゼロインストールをサポートします。どちらもパフォーマンスを劇的に向上させます。
- 新しいバージョンのYarnは、より安全な形式のバージョンロックを提供します。
- アクティブなユーザーコミュニティ。
短所
- Yarnはバージョン5より古いバージョンのNode.jsでは機能しません。
- ネイティブモジュールをインストールしようとすると、Yarnに問題が発生しました。
NPM
利点
- 特に古いバージョンのワークフローに慣れている開発者にとっては使いやすいです。
- ローカルパッケージのインストールは、ハードドライブのスペースを節約するために最適化されています。
- シンプルなUIは、開発時間を短縮するのに役立ちます。
短所
- パフォーマンスの問題が発生した場合、オンラインNPMレジストリの信頼性が低下する可能性があります。これは、NPMがレジストリからパッケージをインストールするためにネットワークアクセスを必要とすることも意味します。
- さまざまなバージョンにまたがる一連の改善にもかかわらず、パッケージをインストールする際のセキュリティの脆弱性は依然として存在します。
- コマンド出力は読みにくい場合があります。
評決
上記のすべてを考慮すると、NPMは、それに慣れていて現在のワークフローに満足している開発者に適しています。ハードドライブのスペースを節約しながら、適度に効率的なユーザーエクスペリエンスを提供します。
一方、Yarnは、プラグアンドプレイやゼロインストールなどのより高度な機能を提供します。また、パフォーマンスとセキュリティがわずかに向上しますが、ハードドライブのスペースが犠牲になります。