先にまとめ
npm ci
はnpm install
と同じように、全依存パッケージをインストールするnpm install
はpackage-lock.json
を更新することがあるnpm ci
はpackage-lock.json
を更新しないnpm ci
はnode_modules
を削除してからインストールする
npm ci
ってなんだ
npm install
に似ているが、CI のような自動化された環境での利用が想定されているもの。あるいは開発環境でクリーンインストールするのにも使える。処理はいくつかの機能を省略するので、npm install
より圧倒的に高速な場合がある。
ドキュメントを読むとそんな感じらしい。
基本的には CI で回す場合はこちらを使いましょう、という理解で良さそう。CI ってなに?くらいの段階の方は別に npm install
だけでも大きな問題はないはず。
npm install
との違い
package-lock.json
ornpm-shrinkwrap.json
が必須。ないとコケる- それらが
package.json
の記述と矛盾する場合、コケる - 依存追加には使えない。(
npm install xxx
でやる) node_modules
はいったん全消しされるpackage-lock.json
を更新しない
npm install
の問題点
npm install
は package-lock.json
を更新することがしばしばあります。
理由は package.json
に記述する semver が幅のあるバージョンを許すためで、また package-lock.json
は(”lock” という名前に反して)node_modules
の実際を反映するものだからです。本当にロックしちゃうとそれはそれで問題があったため変更されたようで。マジかよ。
逆に npm ci
は package-lock.json
を元に node_modules
を構築します。
npm ci
の使いどころ
- CI で回す場合
git clone
直後- 何かがおかしいので
node_modules
を空にしてやり直すとき - 過去の状態を復元するとき
インストールスクリプト
ちょっと仕組みがよくわかんないんだけど、npm ci
したら以下のスクリプトは自動で実行されました。npm install
扱いなんですね。
preinstall
install
postinstall
ソース ちらっと見てみたけどなんもわからん。
おしまい
というわけで、CI では npm ci
を使うと良さそうです。
package-lock.json
については後日また改めて。