Closed6

npm install と npm ci の違いを勘違いしていた説

simocheesimochee

Gemini によると、 package.json と package-lock.json が一致していれば npm install と npm ci の挙動は一致するらしい

というのが認識とちょっとズレるのでちゃんと調べる

simocheesimochee

現状の認識

  • npm install は semver の範囲で最新版をインストールしうる
  • package-lock.json より node_modules のほうが新しいバージョンがインストールされうる
  • npm ci は package-lock.json を更新しないが、 npm install は更新されうる
  • npm install で package-lock.json が更新される前提は知らない
  • ローカルでも npm ci を使えばパッケージバージョンが常に固定されて安全
simocheesimochee

Gemini の主張

  • npm install で package-lock.json が更新されるのは、 package.json の内容と矛盾するとき
  • package.json と package-lock.json 間に矛盾がなければ npm ci と挙動は一致する
  • dependencies のバージョン固定は package-lock.json と矛盾しているときに npm install したときにインストールするバージョン範囲である
simocheesimochee

npm install で package-lock.json が更新されるのは、 package.json の内容と矛盾するとき

npm install はデフォルトで --save--package-lock オプションが true であり、更新がない場合は package-lock.json に基づいてインストールされる

This command installs a package and any packages that it depends on. If the package has a package-lock, or an npm shrinkwrap file, or a yarn lock file, the installation of dependencies will be driven by that

simocheesimochee

package.json と package-lock.json 間に矛盾がなければ npm ci と挙動は一致する

package-lock.json に基づいてインストールされるなら、 package.json に変化がない場合は npm ci と挙動は一致する

npm-ci は package-lock.json が package.json と矛盾するときにエラーにするところが異なる認識でよさそう
https://docs.npmjs.com/cli/v8/commands/npm-ci

simocheesimochee

dependencies のバージョン固定は package-lock.json と矛盾しているときに npm install したときにインストールするバージョン範囲である

--save--package-lock が true のときに npm install したときにだけ package-lock.json が更新される
そのため、バージョン固定の範囲は「 pacakge.json が変更された時にインストールする範囲」であり、 package.json が変化していない限りバージョンは変わらない

このスクラップは7時間前にクローズされました