Edited at

【Node.js】package.jsonとpackage-lock.jsonについて簡単にまとめる


結局何が違うの

買い物に例えて分かりやすく言うと


package.jsonは買うものリスト

100円のりんごを買いたいと書かれている


package-lock.jsonは実際に買ってきた領収書

実際には120円のりんごを買いましたと書かれている


package-lock.jsonの役割

package-lock.jsonはnode_modules配下やpackage.jsonに変更があった際に自動で作成・変更されるファイル

package.jsonに書かれたチルダ ~ やキャレット ^ に従って

アップデートまたはインストールしたパッケージとバージョンが記載されている


チルダ ~

書いてあるバージョン以下のアップデートは許容する



  • ~1 → 1.1.0 OK


  • ~1 → 1.2.5 OK


  • ~1 → 2.1.0 NG


キャレット ^

一番左のバージョン以外のアップデートは許容する



  • ^2 → 2.1.0 OK


  • ^2 → 3.1.0 NG


package.jsonの役割

中身とその役割は以下のようになっている


{
"name": "hoge", // プロジェクト名
"description": "hoge", // プロジェクトの概要
"version": "0.0.1", // プロジェクトバージョン
"homepage": "https://hoge/hoge", // プロジェクトのホームページ.
// 開発者情報
"author": {
"name": "hoge",
"email": "hoge@hoge"
},
// リポジトリ情報
"repository": {
"type": "git", // バージョン管理システム
"url": "git://github.com/kokudori/xxx.git" // リポジトリのURL
},
// バグ報告先
"bugs": {
"url": "https://hoge/hoge"
},
// ライセンス
"licenses": [
{
// ライセンスのタイプ
"type": "MIT",
// ライセンス情報ファイルのURL.
"url": "https://hoge/hoge"
}
],
"main": "xxx.js", // 最初に読まれるファイル. エントリポイント.
// nodeとnpmのバージョン指定
"engines": {
"node": "10.15.3",
"npm": "6.4.1"
},
// パッケージのライフサイクルの様々な時点で実行されるスクリプトの設定
"scripts": {
"test": "nodeunit hoge.js"
},
// npm install 時にインストールされるパッケージ
"dependencies": {
"hoge1": "^0.0.1",
"hoge2": "~0.0.2"
},
}

よくある疑問なので簡単にまとめてみた

やっぱりアウトプットすると頭が整理されるね

もっと Node.js 頑張っていきたい