解決策
チーム内でnpmのメジャーバージョンを合わせる。
発生した問題
npmをアップデート
npmで作業中に以下のようなアップデートガイドが表示されたため、npmをv6からv7にアップデートしました。(Node.jsはv14)
Update available 6.14.15 → 7.24.2
Run npm i -g npm to update
lockfileVersion 1 → 2
すると、その後に npm i
を実行した際、以下のような警告が表示されました。
npm WARN old lockfile:
The package-lock.json file was created with an old version of npm,
so supplemental metadata must be fetched from the registry.
通常より時間がかかり、installは成功しますが、 package-lock.json
の lockfileVersion
が 1 → 2 に変わり、ファイル全体に大きな修正が入っていました。
lockfileVersion 2 → 1
例えばこの package-lock.json
をpushして、他のチームメンバー(npm v6使用)が npm i
を実行した場合、以下のような警告が表示されます。
npm WARN read-shrinkwrap:
This version of npm is compatible with lockfileVersion@1,
but package-lock.json was generated for lockfileVersion@2. I'll try to do my best with it!
この場合もinstallは成功しますが、 lockfileVersion
が 2 → 1 に戻り、ファイル全体に再び大きな修正が入ります。
原因
npm Docs によると、npm v7からは、生成される package-lock.json
のフォーマットが大きく変更されていて、 lockfileVersion: 2
が指定されるようです。
解決策: チーム内でnpmバージョンを合わせる
npmは、Node.jsと一緒にインストールされ、デフォルトのバージョンは Node v14 → npm v6
、 Node v15 → npm v7
のように、ある程度決まっているようです。
ですが、今回のように各個人がnpmをアップデートした際に、 package-lock.json
の中身が変わってしまうという場合があるため、チーム開発では、npmのバージョンについても、メジャーバージョンだけは合わせておいた方が良いようです。
npm i -g npm@バージョン
などで指定バージョンをインストールできます。
(バージョン情報は npm/cliのGitHub 等を参照)