ホームページ > 記事 > ウェブフロントエンド > NPMメカニズムの深い理解
この記事は、NPM メカニズムを深く理解するのに役立ちます。一定の参考価値があります。困っている友人は参照できます。お役に立てば幸いです。
NPM を使用してインストールすると、パッケージの競合 (複数のメイン モジュールのサブモジュールのバージョンの不一致など) が頻繁に発生し、その結果、開発プロセス中にさまざまな重大または軽微な問題が発生します。ここでは、次の内容をすべて紹介します。
##NPMの各種インストール方法
モジュールがインストールされているかどうかに関係なく、npm は
リモート バージョンが新しい場合、またはローカル バージョンが存在しない場合はインストールします
NPM は、レジストリ クエリ サービスを通じて各モジュールの最新バージョンを認識します。
NPM インストールメカニズム1. プロジェクト自体のプレインストールを実行します
現在の npm プロジェクトが定義されている場合、この時点でプレインストール フックが実行されます。
2. 第 1 レベルの依存関係モジュールを決定する
最初に行う必要があるのは、プロジェクト内の第 1 レベルの依存関係、つまり dependency
およびdevDependency 属性で直接指定されたモジュール (この時点で npm install パラメーターが追加されていないと仮定します)。
プロジェクト自体は、
依存関係ツリー
指定したモジュールが既に node_modules ディレクトリに存在する場合、再インストールされません。
3. モジュールの取得
モジュールの取得は次のとおりです。 a再帰のプロセス
は次のステップに分かれています:モジュール情報の取得
モジュールをダウンロードする前に、まず次のことを決定する必要があります。これは、package.json にセマンティック バージョン (semver、セマンティック バージョン) が含まれることが多いためです。
npm3 バージョン 以降、重複排除プロセスがデフォルトで追加されています。これはすべてのノードを走査し、ノード モジュールの最初のレベルであるルート ノードの下にモジュールを 1 つずつ配置します。重複したモジュールが見つかった場合、それらは破棄されます。
ここでは、重複したモジュールを定義する必要があります。これは、
モジュール名が同じであり、互換性があるを参照します。各サーバーは、許可されたバージョン範囲に対応します。2 つのモジュールの許可されたバージョン範囲が重複する場合、まったく同じバージョン番号を持つ必要がなく、互換性のあるバージョンを取得できます。これにより、重複排除プロセス中により多くの冗長モジュールを削除できます。 たとえば、node-modules の下の foo モジュールが lodash@^1.0.0 に依存し、bar モジュールが lodash@^1.1.0 に依存する場合、^1.1.0 は互換性のあるバージョンです。
foo が lodash@^2.0.0 に依存し、bar が lodash@^1.1.0 に依存する場合、semver の規則に従って、この 2 つの間に互換性のあるバージョンはありません。 1 つのバージョンは node_modules に配置され、もう 1 つは依存関係ツリーに残ります。
たとえば、依存関係ツリーが元々次のようになっているとします: node_modulesバージョン 1 とバージョン 2 に互換性のあるバージョンがあると仮定すると、重複排除後は次の形式になります:
node_modules
-- foo
-- lodash (保持されるバージョンは互換バージョンです)
version1 と version2 が非互換バージョンであると仮定すると、後続のバージョンは依存関係に保持されます。ツリー:
node_modules
-- foo
---- lodash@version2
5 .モジュールのインストールこのステップでは、プロジェクト内のnode_modulesを更新し、モジュール内のライフサイクル関数を(プレインストール、インストール、ポストインストールの順序で)実行します。
6. プロジェクト独自のライフ サイクルを実行します
現在の npm プロジェクトにフックが定義されている場合、この時点でフックが実行されます (インストール、ポストインストール、事前公開、準備)。
最後のステップでは、バージョン説明ファイルを生成または更新し、npm インストール プロセスが完了します。
この記事はここで終了しました。その他のエキサイティングなコンテンツについては、PHP 中国語 Web サイトの JavaScript ビデオ チュートリアル 列に注目してください。
以上がNPMメカニズムの深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。