Nodeのバージョンを20系で固定する方法を調べた
やり方は簡単で、package.jsonの中にenginesの定義すれば良い
例えば、Node.jsの20系にする場合は以下
{ "name": "my-app", "version": "0.0.0", "engines": { "node": ">=20.0.0 < 21.0.0" }, ... }
もし、20系でないバージョンで、npm run devなどのスクリプトを実行した場合、以下のエラーが発生する
$ pn dev ERR_PNPM_UNSUPPORTED_ENGINE Unsupported environment (bad pnpm and/or Node.js version) Your Node version is incompatible with "/Users/uga/my-project". Expected version: >=20.0.0 < 21.0.0 Got: v22.2.0 This is happening because the package's manifest has an engines.node field specified. To fix this issue, install the required Node version.
これで、バージョンを固定することができた
GitHub Actionsのワークフロー
package.jsonのenginesでバージョンを固定した場合、GitHub Actionsのワークフローで失敗する可能性がある
それは、GitHub Actionsの実行時ランタイムで使われる Node.js バージョンは18系であるためである
なので、ここでもバージョンを20系にする必要がある
やり方は workflowのyamlファイルのsetup-nodeで以下のように指定すればよい
- uses: actions/setup-node@v4 width: node-version: ">=20.0.0 < 21.0.0" cache: npm
Vercel
Vercelを使っている場合は、Vercelの設定も忘れずに行う
Settings>General>Node.js Versionのプルダウンでバージョンを選べるようになっていて、簡単に設定できる
詳細は以下