npmコマンド虎の巻

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欄に記載するバージョンの書き方です。
記載の仕方により、インストールされるバージョンに制限をつけることができます。

バージョン
指定方法
意味指定例
バージョンのみ指定したバージョンのみOK1.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管理に含めるべきファイルです。