「npm install」と「npm ci」の違いは何ですか? 質問する

「npm install」と「npm ci」の違いは何ですか? 質問する

私は継続的インテグレーションに取り組んでおり、npm ci指示。

私のワークフローでこのコマンドを使用する利点が何なのかわかりません。

それは速くなりますか?テストは難しくなりますか?その後は?

ベストアンサー1

からnpm ci の公式ドキュメント:

つまり、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.jsonpackage-lock.jsonpackage-lock.jsonnpm install

npm ci(クリーンインストールとも呼ばれます) は、テスト プラットフォーム、継続的インテグレーション、デプロイメントなどの自動化された環境、または依存関係のクリーン インストールを確実に実行する必要があるあらゆる状況で使用することを目的としています。

依存関係を直接インストールしpackage-lock.jsonpackage.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.jsonnpm-shrinkwrap.jsonnpm 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

おすすめ記事