パッケージ管理がなんとなくになってしまっていたので一度整理してみる。一番の肝は 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 をするように伝えます。