解決策
チーム内でnpmのバージョンをv6かv7に合わせる。
発生した問題
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 等を参照)
↧