コードをクローンしたり、リポジトリをプルした際、package.json
に記載された依存パッケージを node_modules
にインストールするため、$ npm i
を実行すると思います。
この$ npm i
と似たコマンドに$ npm ci
があります。今回は、この2つのコマンドの違いについてご紹介します。また、昨日「package.json
とpackage-lock.json
の違い」についての記事も書きましたので、興味があればそちらも併せてご覧ください。
npm i
$ npm i
を実行すると、package-lock.json
に記載されている正確なバージョンのパッケージが node_modules
にインストールされます。ただし、package-lock.json
が存在しない場合は、package.json
に記載されているバージョン範囲内で最新のバージョンのパッケージがインストールされます。このとき、新たにpackage-lock.json
が生成され、インストールされたパッケージの正確なバージョンが記録されます。
npm ci
$ npm ci
はpackage-lock.json
に記載されている正確なバージョンのパッケージをインストールする点では$npm i
と似ていますが、動作にはいくつか違いがあります。$ npm ci
はpackage-lock.json
が存在しない場合にエラーを吐き、コマンドが実行できません。また、package.json
と package-lock.json
に矛盾がある場合もエラーとなります。さらに、$ npm i
が不足分を補完して再利用するのに対し、$ npm ci
は既存のnode_modules
を完全に削除した上でパッケージを再インストールします。
どちらを使えばいいのか
これらの違いから、$ npm i
は開発中の柔軟な依存関係管理に向いており、$ npm ci
は本番環境や CI/CDのように再現性が求められる場面で使用するのが適しています。
まとめ
この記事では、$ npm i
と$ npm ci
の違いについて解説しました。2日連続でパッケージ管理に関する記事を書いたことで、少し詳しくなった気がします。今後も、Web開発に役立つ小ネタを発信していきますので、ぜひお楽しみにしてください!