🙆
package.jsonの中にenginesの定義によってnodeバージョンを提示
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の関係表はこちらです
実験開始
そこで、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