現代のアプリケーション開発では、すべてをゼロから書くわけではありません。 代わりに、既存のオープンソースパッケージを使用することを好みます。 これらのパッケージにはそれぞれ独自のメンテナとコミュニティがあります。 だから、私たちのプロジェクトでパッケージを使用すると、カスタム作成されたスクリプトよりも高速な開発、新しい、定期的な更新へのアクセス、およ
一つのパッケージが正しく動作するために他の多くのパッケージに依存するのが一般的です。 同様に、lodashのようなパッケージにも依存しますが、lodash自体もいくつかのパッケージにも依存します。 つまり、入れ子になった依存関係が非常に複雑になり、依存関係管理を手動で処理できなくなることがあります。
パッケージマネージャが非常に便利なときです。 パッケージマネージャーは、プロジェクトの依存関係を自動的に処理するツールです。たとえば、パッケージマネージャーは、単一のコマンドでnew—packagesをインストールまたは既存の—packagesを更新できます。 すべてが自動化されているので、人為的なミスの可能性はありません。 JavaScript開発者は、いくつかのパッケージマネージャーにアクセスできます。 しかし、このガイドでは、最も人気のある三つのものを比較します:
- npm
- Yarn
- pnpm
パッケージマネージャーの概要
npmは、レジストリプロトコルとパッケージング標準の概念を導入した最初のパッケージマネージャーでした。 それは2010年にリリースされ、Nodeによって正式に採用されました。その後まもなくjsチーム、これはnpmのターニングポイントでした。
ノードの大規模な成功の後。js、npmはまた、開発者のコミュニティからの牽引を受けました。 これは、JavaScriptパッケージのためのオンラインレジストリだけでなく、依存関係をインストールして更新するためにレジストリで動作するコマンしかし、yarnとpnpmの開発を引き起こしたnpmの欠点はほとんどありません。 たとえば、npmは対応するものよりも大幅に遅くなります。 また、深刻なセキュリティ脆弱性の歴史を持っています。だから、FacebookやGoogleのような大手ハイテク企業はnpmを使い続けることを躊躇していました。 次に、彼らはnpmのより良いバージョンを開発し、それをYarnと呼ぶ努力に参加しました。 一方、ウクライナの開発者Zoltan Kochanはpnpmを開発しました。
npm、Yarn、pnpmの機能
これらのパッケージマネージャーはすべてオープンソースであり、それぞれの内部動作を確認するためのフルアクセス権があります。 企業レベルのアプリケーション開発では、これが要件になることさえあります。npmの利点:
- は
package-lock.json
ファイルを自動的に生成します。 バージョン管理システムにコミットすると便利です。 これにより、他の開発者はローカルマシンに依存関係を簡単にインストールすることができます - ローカルまたはグローバルな依存関係を簡単に管理する
- npmは複数のバージョンの依存関係を処理するための設備が整っています
- pypi、rubygems、packagistよりも多くのパッケージを持つ公式レジストリを持っています
Yarnの利点:
- YarnはMonorepoに表示される多くの問題を修正します。 たとえば、同じリポジトリの下で複数のパッケージを保守していて、すべてが別々の
package.json
ファイルを持っている場合、yarnですべてのパッケージを簡単に更新 Npmを使用すると、各パッケージフォルダ内でnpm install
コマンドを手動で実行する必要があります。つまり、パッケージを初めてインストールするときに、Yarnはそれを~/.yarn-cache
の下のキャッシュフォルダに追加します。 そのため、次回このパッケージが必要になったときには、YarnはサーバーにHTTP要求を行う代わりにローカルキャッシュからそれを取得します。 この小さな拡張機能は、npmと比較してYarnのパフォーマンスを大幅に向上させます - Yarnも
yarn.lock
というロックファイルを使用するため、プロジ この概念は、確定的なインストールアルゴリズムとも呼ばれます - アプリケーションを開発するときにさまざまなシナリオで便利な組み込みのライセン Yarnはより多くのリソースを利用してビルドプロセスを高速化することができます
- 失敗した場合にHTTP要求を自動的に再試行することができます。 この機能は、インターネットの一時的な問題に直面している場合に特に便利です
pnpmの利点:
- npmと互換性がありますが、ディスク容量の使用量と速度も大幅に向上します
- pnpmはすべてのパッケージを単一の場所にインストールし、シンボリ これは、pnpmがファイル間の違いを検出できるようにするコンテンツアドレッサブルストレージシステムと呼ばれる全く新しい概念を導入しています。 次に、パッケージの2つの異なるバージョンの変更されていないファイルを複製しません
- その最新バージョン、5.8。つまり、パッケージは
package.json
ファイル
パッケージマネージャーの比較
使いやすさ
npm、Yarn、pnpmは、さまざまな操作に対してほぼ同一のコ使いやすい。 一般的に使用されるコマンドの例を次に示します:th>
speed
pnpmに一致するものはありません。これらのパッケージマネージャのパフォーマンス。 さまざまなユースケースのベンチマークによると、pnpmはnpmよりも最大3倍高速のパフォーマンスを示しています。Yarnとnpmの速度は同等です。
いくつかのケースでは、Yarnはnpmよりも大きな利点を持っていますが、npmがより適切な選択であるシナリオがあります。 たとえば、node_modules
cache
lock file
機能をスキップすると、npmは5倍の速度を提供できます。 同様に、3つの機能をすべて使用すると、Yarnはパフォーマンスを向上させ、npmよりも11倍高速になります。npmよりもYarnの主な利点は、チェックサムを使用して各パッケージの整合性を検証することです。 検証プロセスは、パッケージからコードを実行する前に行われるため、パッケージハイジャックの脆弱性の可能性はすべて破棄されます。一方、npmは、悪いパッケージで作業することになると、もう少し寛容です。 セキュリティのベストプラクティスを提供するために、まだ進化しています。 しかし、npmは一般的にセキュリティの面で悪い評判を持っています。
過去には、npmにいくつかのセキュリティ脆弱性があり、多くのプロジェクトに直接影響を与えました。 たとえば、npmバージョン5.7.0では、Linuxベースのオペレーティングシステム(OS)でsudo npm
コマンドを実行すると、システムファイルの所有権
同様に、ビットコインを盗む別の事件は2018年に起こりました。 基本的には、人気のあるノード。jsパッケージEventStreamは、悪意のある依存関係を追加しましたflatmap-stream
そのバージョン3.3.6で。 この悪意のあるパッケージには、開発者のマシンからbitcoinsを盗もうとする暗号化されたペイロードが満載されていました。pnpmはnpmとYarnの両方の肯定的な属性を組み合わせて、より良いセキュリティを提供します。 また、package.json
ファイルで定義されている依存関係のみを使用するようにパッケージをバインドする厳密なアクセス制御メカニズムも実装しています。
安定性
npm、Yarn、およびpnpmは、過去数年間でいくつかの段階を経ています。 彼らはオープンソースコミュニティからの貢献のトンを受け取ったので、時間の経過とともに、彼らのコードベースは成熟しました。
そして、時間の経過とともに、新しい概念やアイデアが現れ、破壊的な変化をもたらす可能性があります。 このガイドを書いている時点では、これらのパッケージマネージャーはすべて良好な状態にあり、問題なくプロジェクトで使用できます。YarnはFacebookとGoogle、npmはMicrosoftとNodeによって支えられています。
FacebookとGoogleによって支えられています。js、およびpnpmは主に個人によって開発されていますが、現在は75人以上の貢献者がいます。
monoreposのサポート
Monoreposは、大規模なコードベースを保存および管理するために、大規模なハイテク企業によって主に好まれています。 npmは、個々のプロジェクトを管理するためにのみ設計されました。 今のところ、monoreposをサポートする機能はありません。 しかし、Yarnとpnpmの両方が、ワークスペースの概念のおかげでmonoreposを完全にサポートしています。
Deterministic—ロックファイル
三つのパッケージマネージャーはすべてロックファイルの機能が満載されています。 異なる開発者がプロジェクトのまったく同じコピーをインストールすることができます。 npmはpackage-lock.json
ファイルを使用し、Yarnはyarn.lock
を使用し、pnpmはpnpm-lock.yaml
を使用します。
結論
より高速で効率的なメモリ使用量を提供する解決策を探している場合は、pnpmの使用を強く検討する必要があります。monoreposを処理している場合は、pnpmまたはYarnを使用して処理できます。 ただし、Yarnはfacebookに使用状況データを送信するため、一部のシナリオではYarnを適切な選択にしない可能性があります。
YarnはNodeのバージョン5もサポートしていません。js”を発表した。 この点で、npmはNodeの推奨オプションです。jsベースのプロジェクトは、ノードによって推奨されているためです。jsチーム。 最近では、ノード。jsにはデフォルトでnpmが付属しています。npmでは、npmに存在する多くの発行者を解決するために作成されたYarnの開発を引き起こしたセキュリティ問題でその歴史を考慮する必要があります。 したがって、プロジェクトのセキュリティに懸念がある場合は、npmの代わりにYarnを使用することを検討してください。
LogRocket:コンテキストを理解することにより、JavaScriptのエラーを簡単にデバッグ
デバッグコードは、常に退屈な作業です。 しかし、あなたのエラーを理解するほど、エラーを修正するのが簡単になります。LogRocketを使用すると、新しいユニークな方法でこれらのエラーを理解することができます。
LogRocketを使用すると、これらのエラーを理解するこ 当社のフロントエンド監視ソリューションは、JavaScriptフロントエンドとのユーザーエンゲージメントを追跡し、ユーザーがエラーにつながったユーザーが何をしたかを
LogRocketは、コンソールログ、ページの読み込み時間、スタックトレース、ヘッダー+ボディ、ブラウザのメタデータ、およびカスタムログ あなたのJavaScriptコードの影響を理解することは決して容易ではありません!
無料で試してみてください。