package.json
package.jsonの基礎知識です。
package.jsonについて
package.jsonファイルは、パッケージ(プロジェクト)単位に作られるファイルで、 パッケージのバージョン番号や各種設定、パッケージでインストールが必要なパッケージの一覧などが記述されたファイルです。
package.jsonの雛形は、npm initコマンドで作成することができます。
(もちろん手で作成しても、外部から入手したものでも構いません)
(package.jsonの例)
{
"name": "myapp",
"version": "1.2.4",
"description": "サンプルパッケージです",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index.js"
},
"keywords": [
"myapp",
"hoge"
],
"author": "hoge",
"license": "ISC",
"dependencies": {
"react": "^18.2.0",
"uuid": "^9.0.0"
},
"devDependencies": {
"webpack": "^5.76.2"
}
}
パラメータの意味
package.jsonの主要パラメータの意味です。
パラメータ | 意味 |
---|---|
name | パッケージの名称 (例)"name": "myapp" |
version | パッケージのバージョン (例)"version": "1.2.4" |
private | パッケージの公開有無(true | false) ※trueにするとパッケージが公開されません (例)"private": true |
description | パッケージの説明文 パッケージの概要などを記載します (例)"description": "This is description." |
main | 一番最初に呼び出すスクリプトファイル (例)"main": "index.js" |
scripts | 任意のコマンド 名前を付けて複数定義できます 定義したコマンドはnpm run-scriptで実行できます ※start、stop、testに関してはnpm start、npm stop、npm testで実行できます |
keywords | パッケージを表すキーワード ここで定義したキーワードはnpm searchコマンドで検索できる (例)"keywords": ["foo", "bar"] |
author | パッケージの作者 (例)"author": "xxx Inc" |
license | ライセンス情報 (例)"license": "Commercial" |
dependencies | 依存するパッケージとバージョン ここには当プロジェクトで必須のパッケージを記載する (例)"typescript": "^4.9.5" ※バージョンの書き方は以下「パッケージのバージョンについて」欄を参照ください |
devDependencies | 依存するパッケージとバージョン ここには開発で使用するパッケージなど必須でないパッケージを記載する ※バージョンの書き方は以下「パッケージのバージョンについて」欄を参照ください |
homepage | プロジェクトホームへのURL (例)"homepage": "./" |
上記のパラメータはすべてではありません。
パッケージのバージョンについて
package.jsonのdependencies欄、devDependencies欄に記載するバージョンの書き方です。
記載の仕方により、インストールされるバージョンに制限をつけることができます。
バージョン 指定方法 | 意味 | 指定例 |
---|---|---|
バージョンのみ | 指定したバージョンのみOK | 1.2.3 ⇛1.2.3のみOK |
チルダ付き (~) | 指定したバージョン以下がが上がることのみOK | ~1.2.3 ⇛1.2.3以上1.3.0未満 ~1.2 ⇛1.2.0以上1.3.0未満 ~1 ⇛1.0.0以上2.0.0未満 |
キャレット付き (^) | ゼロでない一番左側のバージョンを変えない範囲でOK | ^1.2.3 ⇛1.2.3以上2.0.0未満 ^0.1.2 ⇛0.1.2以上0.2.0未満 ^0.0.2 ⇛0.0.2以上0.0.3未満 |
アスタリスク (*) | どのバージョンでもOK | * ⇛全バージョンOK |
package-lock.jsonについて
package-lock.jsonファイルは、package.jsonファイルと異なり
実際にインストールしたパッケージのバージョンが固定で定義されています。
(package.jsonは更新可能な範囲でバージョン番号が定義されます)
なので、package.jsonを元に環境構築するとタイミングによりバージョンが微妙に異なる可能性がありますが、 package-lock.jsonを元に環境構築すると常に同じバージョンの環境を作成できます。
package.jsonを元に環境を作成したい場合は、npm installコマンドを使用し、
package-lock.jsonを元に環境を作成したい場合は、npm ciコマンドを使用します。
以下、package-lock.jsonの特徴です。
- 実際にインストールしたパッケージの固定バージョンが記載されます。
- pakcage-lock.jsonは手で直接修正することはNGです。
- npm installコマンド実行時に新規作成または更新されます。
- package-lock.jsonファイルを参照するのは、npm ciコマンド実行時のみです。
- Git管理している場合は、package.jsonと同様にGit管理に含めるべきファイルです。