そういう仕様です。
先にまとめ
package-lock.json
は NPM リポジトリーに追加されない- つまり依存パッケージとしてインストールされる場合、バージョンは固定されない
- Git のリポジトリーには含めてください
公開されない
One key detail about
package-lock.json
is that it cannot be published, and it will be ignored if found in any place other than the toplevel package. It shares a format withnpm-shrinkwrap.json
, which is essentially the same file, but allows publication.
package-lock.json
の鍵となる特徴として、公開されないという点があります。またトップレベルパッケージ以外の場所のものは無視されます。npm-shrinkwrap.json
は本質的に同じファイルでありその書式を共有していますが、こちらは公開が可能です。
ここでいう「公開 (publish) 」とは npm-publish のことで、NPM パッケージとして公開するという意味です。公開すると npm install xxx
でインストールできるようになります。
というわけで npm install xxx
でインストールしたパッケージには package-lock.json
は含まれていません。
パッケージとしてはバージョンが固定されない
package-lock.json
を利用することで利用中の依存パッケージのバージョンをツリー全体で記録できるのですが、前述のとおり NPM のリポジトリーには登録されないので、インストールされるのは package.json
に記載のバージョンが許容する範囲の最新のもの、になります。
つまり、手元で開発する場合にのみ package-lock.json
が意味を成すって感じですね。
だからといって使わなくてもいいじゃんみたいな話じゃないです。それは別の日に。
shrinkwrap
npm-shrinkwrap.json
は package-lock.json
と同じようなものですが、こちらは NPM リポジトリーへ含めることが可能です。
可能ですが、強く非推奨 (strongly discouraged) とされています。
おしまい
偉そうな顔して shrinkwrap
使ったことないので正直肌感がわかってないです。
参照
- npm-package-lock.json | npm Documentation
- npm-shrinkwrap.json | npm Documentation
- When not to use package-lock.json – DEV Community 👩💻👨💻