npm install と npm ci をどのように使い分けるか
※タイトルの npm install
は引数なしを想定しています。
一言
- 引数なしの
npm install
は使わない - 環境構築時には
npm ci
を使用する
詳細
npm install
npm ci
- 依存ライブラリの更新を定期的に行う場合、CIで
npm install
をして更新があればpackage-lock.jsonをPRさせるのが良さそう。 - package.json自体の更新はdependabotを使うと良い。
きっかけ
- 引数なしの
npm install
は package-lock.json を更新しないと思っていたが更新された(単純に記憶違い) - 各種環境構築スクリプトで
npm install
が使われていたが、package-lock.json が更新されるため、差分が発生する - 社内で聞いたら教えてくれた↑↑の通り教えてくれた
参考URL
- What is the difference between "npm install" and "npm ci"?
- stackoverflow。凄いわかりやすい
- https://docs.npmjs.com/cli/v8/commands/npm-install
- https://docs.npmjs.com/cli/v8/commands/npm-ci
追記(2022/05/28)
id:efcl から以下のブコメをもらったので追記。(よくわかっていないのでそのうちもう少し調べる)
npm install と npm ci をどのように使い分けるか - 山pの楽しいお勉強生活b.hatena.ne.jp
- [npm]
引数なしの`npm install`がpackage-lock.jsonを更新するかは、npmのバージョンで動作が異なる感じ。 <a href="https://github.com/azu/npm-install-update-package-lock/actions/runs/2399517030" target="_blank" rel="noopener nofollow">https://github.com/azu/npm-install-update-package-lock/actions/runs/2399517030</a> <a href="https://github.com/npm/rfcs/issues/415#issuecomment-938279066" target="_blank" rel="noopener nofollow">https://github.com/npm/rfcs/issues/415#issuecomment-938279066</a>
2022/05/28 10:44
- azuさんのGitHub Actionsの結果を見ると、npm6とnpm8で
npm install
をした結果、npm6はlockファイル内の依存ライブラリのバージョンが変更されているが、npm8は変わっていなかった。 - 2つ目のリンクの内容はよくわからない
- 少し調べたところ、npm7からlockファイルのバージョンが上がり、
npm install
を行った際にバージョン2に書き換わるらしいのだが関係ある?