package.jsonとは
- 現在のプロジェクトの情報を保存するファイル。
-
package.json
はプロジェクトのルートディレクトリに保存され、アプリケーションの依存性などを記録する。
package.json
ファイルの各情報はkey-valueと保存される。(jsonオブジェクト)
プロジェクトのnameとversionは必須として記載しなければならなく、インストールすべきパッケージのリストを、dependencies
またはdevDependencies
に明示しなければならない。
dependencies
とdevDependencies
の違い
devDependenciesは開発環境時にのみ必要なパッケージを追加するところ。
例えば、jest
やstyle-loader
などは、主に開発環境でしか使わないパッケージであるため、devDependencies
に記載して別途管理する。
しかし、axiosやvue-routerなど、本番環境でも利用するパッケージに関しては、dependencies
に記載して別途管理する。
ここでdependencies
とdevDependencies
に分けて記載するためにはnpm
でインストールする際にオプションを与えることで分けて記載することができる。
npm install < パッケージ名 >
-> dependencies
に記載される。
npm install < パッケージ名 > --save-dev
-> devDependencies
に記載される。
package-lock.jsonとは
- 依存関係のパッケージのバージョンの詳細を記載したファイル
-
package-lock.json
はnode_modules
の構造やpackage.jsonが修正または生成される際の依存性を正確かつ具体的な情報を記載する。
npm install < パッケージ名 >
でインストールすると、package.json
にはインストールしたパッケージの大まかなバージョンが記載されると同時にnode_moduls
が生成・追加される。
しかし、時間が経過して新しいバージョンのパッケージが配布されてからpackage.json
をもって再度npm install
を行うと、新しいパッケージパッケージがインストールされる。
つまり、インストールした時点によってバージョンが異なるので、アプリケーションの動作の保証ができない問題があり、それで生まれたのがpackage-lock.json
である。
実際のファイルの中身の違い
package.jsonの例
package-lock.jsonの例
package-lock.jsonがあるときのnpm install
の動き
package-lock.json
があるとnpm install
の動きはちょっと変わる。
具体的には、package.json
を利用してnode_modules
を生成しないで、package-lock.json
を利用してnode-modules
を生成する。