npm install と npm ci の話

パッケージ管理がなんとなくになってしまっていたので一度整理してみる。一番の肝は package.json と package-lock.json があるけどどう違うの?ってとこ。

node_modules を再現したい

パッケージたちは node_modules ディレクトリにインストールされてます。同じ開発環境を再現したいときには同じ node_modules があればいいわけです。

ですが、この node_modules はとにかく重い。リポジトリでバージョン管理するには不向きです。

package-lock.json で node_modules を再現する

そこで、node_modules 本体の代わりに「node_modules にあるべきものリスト」を管理します。これが package-lock.json です。package-lock.json に書いてある通りにパッケージをインストールすれば node_modules ディレクトリを再現できるようになっています。

package-lock.json から node_modules を再現するには npm ci を使います。

npm ci

npm ci は node_modules ディレクトリを一度削除して、package.json との整合性をチェックした上で node_modules を再現します。

package.json と package-lock.json の違い

では package.json と package-lock.json は何が違うのでしょうか?

package.json はパッケージのバージョンの 範囲 を指定しています。なので、install するタイミングによってはバージョンが異なる可能性があります。これを解消するのが package-lock.json で、こちらはバージョンが固定されています。

package-lock.json が更新されるとき

パッケージのバージョンをアップデートしたい場合は npm install や npm update を使います。このときに package-lock.json も合わせて更新されます。

また、新しいパッケージを追加する場合にも npm install package を実行すると package-lock.json が更新されます。

package-lock.json が更新されたら忘れずにリポジトリに push しましょう。もし、同じ環境で開発している人がいるのであれば、npm ci をするように伝えます。

あなたがnpm installをしてはいけない時 - Minimal Blog
Minimalはエンジニアが運営している会社です。システム開発、コンサルティング、教育、人材紹介など、様々な事業を行っています。
https://jpcodeqa.com/q/bf8126c8e07da8bd33ccdfaa6e96c036
タイトルとURLをコピーしました