目次
- 目次
- 【最初に結論】package-lock.jsonの"lockfileVersion"はどちらを使えば良い?
- まえがき
- 適用されるlockfileVersionとnpmの関係
- 参考になる日本語の記事
【最初に結論】package-lock.jsonの"lockfileVersion"はどちらを使えば良い?
lockfileVersion
が 2
になったのはnpmのversion 7から。
それを踏まえて、下記のように挙動が変わる。
- npm 6を利用しているとき
lockfileVersion
が1
のときにnpm install
をしても問題はないlockfileVersion
が2
のときにnpm install
をするとupdateを促される。そしてlockfileVersion
が1
に変更される
- npm 7を利用しているとき
lockfileVersion
が1
のときにnpm install
をすると警告が出る。そしてlockfileVersion
が2
に変更されるlockfileVersion
が2
のときにnpm install
をしても問題はない
チーム開発ではnpmのバージョンを揃えるようにする
lockfileVersionが2のほうがパフォーマンスが向上しているが、例えばチーム開発のときはnpmのversionを揃えて開発をするようにする。
でないと無駄に package-lock.json
の内容が書き換わるという面倒な事態になる。
オープンソース開発ではlockfileVersion:2 に移行していってもよさそう?
Node.jsの現在のLTSのバージョンはv16になっており、こちらではデフォルトでnpm v8が採用されている。
node/CHANGELOG_V16.md at master · nodejs/node · GitHub
そのため、オープンソース開発などではこれから lockfileVersion: 2
の package-lock.json
を見かけることが多くなってくると思われる。
特別な理由がない限り、メインで利用するNode.jsのversionは上がっていくので、私自身のリポジトリでも lockfileVersion: 2
に移行していこうと考えている。
実際に以前公開した、i18n用のシンプルでミニマムなReact hooksライブラリである use-mini18n
では少し前に lockfileVersion
を 2
にあげている。
まえがき
少し前のことだが、npmのversionを上げてnpmがv8になってから、npm installを行うと、package-lock.jsonの lockfileVersion
が 2
になっていた。
lockfileVersion: 2
とはなんぞや?と思い、公式ドキュメントで調べてみたところ、どうやら lockfileVersion: 2
への変更はnpmのversion 7から行われていたようだ。
なぜ lockfileVersion
のバージョンが上がったのかというところだが、これはパフォーマンス向上のためというのが理由のよう。
As of npm v7, lockfiles include enough information to gain a complete picture of the package tree, reducing the need to read package.json files, and allowing for significant performance improvements.
適用されるlockfileVersionとnpmの関係
調べてみたところ、lockfileVersionはv3まであるらしいが、これはv1との後方互換性がないものらしいので、利用するとしてもv2までにとどめておいたほうが良さそう。
- v1: npm v5 および v6 で使用されるpackage-lock.jsonのバージョン
- v2: npm v7(v8もこれ) で使用されているpackage-lock.jsonで、v1 のロックファイルとの後方互換性がある
- v3: npm v7(v8もこれ) で使用されるロックファイルのバージョンで、後方互換性はない。
参考になる日本語の記事
lockfileVersionについて少し調べたことについて備忘録がてら書いていたが、ここまで書いたところで、日本語で書かれたQiitaの記事を見つけた。
色々と網羅的に書いてあるので、詳細を知りたい方はこちらのポストを読んでみることをおすすめします。