ベストアンサー1
つまり、npm install と npm ci の主な違いは次のとおりです。
- プロジェクトには、package-lock.json または npm-shrinkwrap.json が存在している必要があります。
- パッケージ ロック内の依存関係が package.json 内の依存関係と一致しない場合、npm ci はパッケージ ロックを更新せずにエラーで終了します。
- npm ci は一度にプロジェクト全体のインストールのみ可能です。このコマンドでは個々の依存関係を追加することはできません。
- node_modules がすでに存在する場合は、npm ci がインストールを開始する前に自動的に削除されます。
- package.json またはいずれかのパッケージ ロックに書き込まれることはありません。インストールは基本的に凍結されます。
基本的に、は依存関係のリストを作成するために をnpm install
読み取り、 はこれらの依存関係のどのバージョンをインストールするかを通知するために を使用します。に依存関係が含まれていない場合は、によって追加されます。package.json
package-lock.json
package-lock.json
npm install
npm ci
(クリーンインストールとも呼ばれます) は、テスト プラットフォーム、継続的インテグレーション、デプロイメントなどの自動化された環境、または依存関係のクリーン インストールを確実に実行する必要があるあらゆる状況で使用することを目的としています。
依存関係を直接インストールしpackage-lock.json
、package.json
不一致のバージョンがないことを確認するためにのみ使用します。依存関係が欠落しているか互換性のないバージョンがある場合は、エラーがスローされます。
新しい依存関係を追加したり、プロジェクトの依存関係を更新したりするために使用しますnpm install
。通常は、依存関係のリストを更新する変更をプルした後の開発中に使用しますが、この場合は使用することをお勧めしますnpm ci
。
決定論的で繰り返し可能なビルドが必要な場合に使用しますnpm ci
。たとえば、継続的インテグレーション、自動化されたジョブなどを実行する場合や、依存関係を初めてインストールする場合などですnpm install
。
npm install
- パッケージとそのすべての依存関係をインストールします。
npm-shrinkwrap.json
依存関係はおよびによってpackage-lock.json
(この順序で)駆動されます。- 引数なし: ローカル モジュールの依存関係をインストールします。
- グローバル パッケージをインストールできます。
- 不足している依存関係をインストールします
node_modules
。 package.json
またはに書き込むことができますpackage-lock.json
。- 引数 ( ) とともに使用すると、依存関係を追加または更新するために に
npm i packagename
書き込むことができます。package.json
- 引数なしで使用すると、(
npm i
) は、package-lock.json
このファイルにまだ存在しない依存関係のバージョンをロックダウンするために に書き込むことがあります。
- 引数 ( ) とともに使用すると、依存関係を追加または更新するために に
npm ci
- 少なくともnpmが必要バージョン5.7.1。
package-lock.json
またはが存在することが必要ですnpm-shrinkwrap.json
。- これら 2 つのファイルの依存関係が一致しない場合はエラーがスローされます
package.json
。 - すべての依存関係を一度に削除し
node_modules
てインストールします。 - または に書き込むことはあり
package.json
ませんpackage-lock.json
。
アルゴリズム
はまたはnpm ci
から依存関係ツリー全体を生成し、次のアルゴリズムを使用しての内容を更新します(package-lock.json
npm-shrinkwrap.json
npm install
node_modules
ソース):
load the existing node_modules tree from disk clone the tree fetch the package.json and assorted metadata and add it to the clone walk the clone and add any missing dependencies dependencies will be added as close to the top as is possible without breaking any other modules compare the original tree with the cloned tree and make a list of actions to take to convert one to the other execute all of the actions, deepest first kinds of actions are install, update, remove and move