LoginSignup
2
0

More than 3 years have passed since last update.

package-lock.jsonってなんぞ

Posted at

Angularにでてくる。package-lock.jsomってなんだって思ったのでメモを少しまとめてみた。

package-lock.json

package-lock.json:dependencyのバージョンをlockするためのファイル。npm install の実行時に自動的に作成される。

一般にnpm パッケージは他のチームの開発マシン、テスト環境、本番環境など複数の環境で実行されるため、

すべての環境で全く同じバージョンのdependencyをインストールしたいと思うのは自然である。

(バージョンが同じでなければ「ある環境ではうまく実行でき、あるか環境ではエラーが出る」といったことが起こりうる)

実際のところ、package.jsonだけではこれは実現できない。キャレット ^ ,チルダ ~ を使わなければ大丈夫というわけではない。

常にバージョンの変化が起こっているので、そのたびにnpm install をしていると最新バージョンでinstallされてしまう → dependencyのバージョンが異なる環境ができる 。

これを解決するためにnpm v5以降でpackage-lock.jsonが導入された。

このファイルに、dependency、dependencyのdependency…と間接的なものも含めてすべてのdependencyのバージョン(とそのintegrity)が記録される。

npm v6.9.0時点では npm install の具体的な挙動は次のようになっている。

  • package-lock.jsonが存在しない
    • package.jsonに基づいてdependencyがインストールされ、実際にンストールされたバージョンがpackage-lock.jsonに書かれる。
  • package-lock.jsonが存在するとき
    • package-lock.jsonに基づいてインストールされるが、package.json指定されたバージョンとの矛盾があれば、
      package.jsonが優先され、実際にインストールされたバージョンがpackage-lock.jsonに書かれる。

package-lock.jsonを優先したい場合はnpm ci を実行すればよい

このコマンドはpackage-lock.jsonに基づいてdependencyをインストールし、

もしpackage.jsonとの矛盾があればエラーを出力する。

また、インストール前にnode_modulesを削除するので、クリーンインストールしたいときにも使える。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0