[[npm ci]]が[[npm install]]と異なる点は以下5点。 - [[package-lock.json]] のバージョンを使う - [[package-lock.json]] の依存関係が、[[package.json]]と一致しない場合はエラーになる - プロジェクト全体のインストールのみ許容する - 個々のインストール `npm ci <package>` は許容しない - `node_modules` が存在する場合は削除してからインストールを開始する - [[package.json]] や [[package-lock.json]] を更新することはない ## よくある勘違い ### npm installは[[package-lock.json]]を見ない 実はそんなことはない。[[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, respecting the following order of precedence: > > - `npm-shrinkwrap.json` > - `package-lock.json` > - `yarn.lock` > > *[npm-install | npm Docs](https://docs.npmjs.com/cli/v11/commands/npm-install) * ただし、[[package.json]]と[[package-lock.json]]の内容に齟齬があった場合の挙動は[[npm ci]]と異なる。 1. [[package.json]]の依存関係を優先しインストール 2. [[package-lock.json]]を矛盾しないように更新する そのため、[[package.json]]と[[package-lock.json]]のバージョン管理に齟齬の出る可能性があるなら、『[[package-lock.json]]の通りに **必ず** インストールされる』ことは保証できない。 なので以下の棲み分けが良さそう。 - ライブラリバージョンアップをしたいときは [[npm install]] - 動かしたい時 or CI のときは [[npm ci]]