NPMモジュールのインストール・メカニズムを導入し、なぜNPM入力し、対応するモジュールが自動的にインストールすることができますインストールしますか?

機構を搭載1. NPMモジュール。

  • 発行npm installコマンドを
  • ディレクトリの問い合わせnode_modules内の特定のモジュールが存在するかどうか
    • なくなった場合は、再インストールしていません
    • もしそこに
      • レジストリクエリモジュール圧縮されたパッケージにNPMのURL
      • ルートディレクトリに格納され、アーカイブをダウンロード.npmディレクトリ
      • 現在のプロジェクトにアーカイブを解凍node_modulesディレクトリ

2. NPMの実装原理

NPMコマンドをインストールしてQiaoxiaを入力します入力した後、(例えばNPM 5.5.1で)、次の段階を経ます:

  1. プロジェクト自体の実装では、プレインストール

定義された現在のプロジェクトNPMはフックをプレインストールした場合、この時間は、実行されます。

  1. 一階の依存決意モジュール

まず行う必要があるプロジェクト一階に依存し、すなわち、依存関係とdevDependenciesプロパティを直接指定されたモジュール(無添加NPMパラメータをインストールしないと仮定)を決定することです。

プロジェクト自体がツリーの全粒依存ルートで、各モジュールは、マルチノード・プロセスを開きますNPMは徐々に各モジュールからのより深いレベルが第1の床に依存検索し始めたルートノードの下のサブツリーの一階に依存しています。

  1. 取得モジュール

取得モジュールは、以下のステップに分け、再帰的なプロセスです。

  • 取得モジュール情報。モジュールをダウンロードする前に、我々は最初のバージョンを決定する必要がありますpackage.jsonはセマンティックバージョン(semver、セマンティックバージョン)であるので、それはしばしばです。この時点で、倉庫から取得できない場合は、直接、取ることができ、モジュールのバージョン情報の説明ファイル(NPM-shrinkwrap.jsonまたはパッケージ-lock.json)がある場合。このようなパッケージ^ 1.1.0にバージョンpackaeg.jsonとして、NPMは、アコードの1.xxのフォームの最新バージョンを入手するために倉庫に行きます。
  • 取得モジュールエンティティ。Previous'llアーカイブモジュールアドレス(解決フィールド)を取得、NPMはこのアドレスを使用して、ローカルキャッシュをチェックします、キャッシュは倉庫からのダウンロードが存在しない場合は、直接を取ることがあります。
  • その後、停止しない場合は、ステップ1に戻り依存がある場合、モジュールは、依存して下さい。
  1. 平坦化モジュール(重複排除など)

前のステップで取得するリピートモジュールの多数を含むことができる完全な依存性ツリーです。モジュールBモジュールもlodashに依存し、そのようなloadshに依存します。前npm3に設置されたツリー構造に基づいて厳格に依存し、それはモジュールの冗長性の原因となります。

開始npm3のデフォルトから、重複排除のプロセスに参加しました。これは即ち、第1層のノードモジュール、モジュール一つ一つのルートノード下のすべてのノードを横断します。モジュールが重複して発見された場合、それは破棄されます。

これは、同じモジュール名とsemver互換性を指すリピートモジュールの定義であるべきです。各期間は、交差点の範囲を可能にするために2つのモジュールのバージョンが存在する場合、それは互換性のあるバージョンを入手することができ、許容範囲バージョンsemver対応し、バージョン番号は同一である必要はなく、より多くの冗長モジュールがプロセス重複排除に除去させることができます。

例えば、モジュールの依存関係lodashする@ FOOノードモジュール^ 1.0.0、バーモジュールの依存関係lodash@^1.1.0、^は、互換性のあるバージョン1.1.0です。

fooがlodash @ ^ 2.0.0、バー依存lodash@^1.1.0を依存している場合は、その後、互換性のあるバージョンが存在しない、どちらもsemver規則に従って。それはnode_modulesのバージョンになり、もう一方は、ツリーに依存したまま。

たとえば、これは元々依存ツリーだったと仮定します。

node_modules
- fooの
---- lodash @ VERSION1

-バー
---- lodash @バージョン2

バージョン1バージョン2の前提と重複排除は次の形式になります後、互換性のあるバージョンのとおりです。

node_modules
- FOO

- バー

- lodash(予約済みバージョン互換性のあるバージョン)

VERSION1 VERSION2と非互換性のあるバージョンを仮定し、バージョンは、依存関係ツリーの後ろに残っています:

node_modules
- FOO
- lodash @ VERSION1

-バー
---- lodash @バージョン2

  1. インストールモジュール

このステップは、(順番にプレインストール、インストール、インストール後の)機能のライフサイクルにおけるプロジェクトnode_modulesを更新し、実行モジュールます。

  1. プロジェクトのライフサイクル自体の実装

あなたは、現在のプロジェクトのNPMフックを定義した場合、この時間は、(インストールに応じて、インストール後、prepublish、オーダーを準備)が実行されます。

最後のステップは、発生以降、プロファイル、NPMプロセスが完了し、インストールすることです。

参考http://www.ruanyifeng.com/blog/2016/01/npm-install.html

https://www.bbsmax.com/A/qVdemmnEdP/

https://www.zhihu.com/question/66629910

おすすめ

転載: www.cnblogs.com/wangxi01/p/11202584.html