私は継続的インテグレーションに取り組んでいて、 npm ci コマンドを発見しました。
私のワークフローにこのコマンドを使用することの利点が何であるか私は理解できません。
速いですか?それはテストを難しく、大丈夫に、そして後にしますか?
要約すれば:
npm install
はpackage.json
を読んで依存関係のリストを作成し、package-lock.json
を使ってこれらの依存関係のどのバージョンをインストールするかを通知します。 依存関係がpackage-lock.json
にない場合は、npm install
によって追加されます。
npm ci
(C ontinuous I ntegrationにちなんで名付けられます) 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
package-lock.json
またはnpm-shrinkwrap.json
が必要です。package.json
と一致しない場合はエラーをスローします。node_modules
を削除し、all dependenciesを一度にインストールします。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
Npm ciは既存のnode_modulesフォルダを削除し、各パッケージの特定のバージョンをインストールするためにpackage.lockファイルに依存します。一部の機能をスキップするため、npm installよりもかなり高速です。クリーンな状態でインストールすると、ci/cdパイプラインやdockerビルドに最適です。特定のパッケージではなく、すべてを一度にインストールするためにも使用します。
あなたがリンクした文書は要約を持っていました:
要するに、npm installとnpm ciを使用することの主な違いは次のとおりです。
- プロジェクトには、既存のpackage-lock.jsonまたはnpm-shrinkwrap.jsonが必要です。
- パッケージロック内の依存関係がpackage.json内の依存関係と一致しない場合、npm ciはパッケージロックを更新する代わりにエラーで終了します。
- npm ciは一度にプロジェクト全体をインストールすることができます。このコマンドで個々の依存関係を追加することはできません。
- Node_modulesが既に存在する場合は、npm ciがインストールを開始する前に自動的に削除されます。
- Package.jsonやpackage-lockのいずれにも決して書き込まれません。インストールは本質的に凍結されています。