🙆

package.jsonの中にenginesの定義によってnodeバージョンを提示

2022/06/25に公開

ReactやWebpackのプロジェクトを起動する時
nodeバージョンが合わないときによくエラーになってしまうことがあります
そして、正確なnodeバージョンはReadmeに記録したことがなかったらすごい災難になることもあります

そこで、package.jsonというファイルの中で、enginesという項目の定義によって
nodeバージョンを明晰に定義することができます

記載例は以下のようになります

package.json
{
	"name": "konsta",
	"engines": {
		"node": ">=16.0.0",
		"npm": ">=7.10.0 <8"
	}
}

そして、フォルダ内に.npmrcというファイルを作成します
配置はこんな感じです、package.jsonと同じ階層で.npmrcを置きます

.
├── .npmrc
└── package.json

.npmrcに以下のように記入しておきます

.npmrc
engine-strict = true

ちなみにnpmは、nodeと依存しているパッケージなので
npmのバージョンを特定したいなら、npmのバージョン指定ではなくて
その相応しいnodeバージョンをインストールすることです

nodeとnpmの関係表はこちらです
https://nodejs.org/en/download/releases/

実験開始

そこで、node_modulesというフォルダを削除し
nodeバージョンを一旦、16.0.0以下に設定して
npm installをRunしてみます

npm ERR! notsup Unsupported engine for konsta@0.1.0: wanted: {"node":">=16.0.0","npm":">=7.10.0 <8"} (current: {"node":"9.6.0","npm":"5.6.0"})

そして、上のようなエラーメッセージが出ます

終わりに

enginesは、dependenciesのインストールのみ効果が出るようです
上のように、npm installというコマンドのみバージョンを提示することができますが
npm run startなどの場合は、違ってnodeバージョンを使ってもスルーされます

Discussion