Windows環境でnpmのscripts実行時に環境変数の構文エラーが出る
普段Mac環境で開発しているNext.jsプロジェクトをWindowsで動かそうと思ったところ、npm run dev
の実行時に構文エラーが発生した。
'PORT' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
コマンドはgit-bash上で実行。
該当のpackage.jsonには、以下のようなポート番号を指定する環境変数を記述している。
"scripts": {
"dev": "PORT=15000 NODE_OPTIONS='--inspect' next dev",
どうやらWindows環境ではnpmのscripts実行時、cmdを利用するように設定されているため、この記述方式では構文エラーが出る模様。
$ npm config get shell
C:\Windows\system32\cmd.exe
$ npm config get script-shell
null
scriptsが実行されるシェルはプラットフォームに依存するらしい。
The actual shell your script is run within is platform dependent. By default, on Unix-like systems it is the /bin/sh command, on Windows it is cmd.exe. The actual shell referred to by /bin/sh also depends on the system. You can customize the shell with the script-shell config.
https://docs.npmjs.com/cli/v9/commands/npm-run-script
以下いずれかの方法にて解決を確認。今回はMac環境と共通で作業したかったため、後者のscripts実行時のシェルを変更する方法を採用。
解決方法1
package.json
の環境変数設定記述(構文エラーになっている箇所)をcmdが解釈できるよう書き換える。
"dev": "PORT=15000 NODE_OPTIONS='--inspect' next dev",
↓
"dev": "set PORT=15000 NODE_OPTIONS=--inspect && next dev",
解決方法2
npmのscripts実行に利用するシェルをgit-bashに変更する。
$ npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"
$ npm config get script-shell
C:\Program Files\git\bin\bash.exe
script-shell
- Default: null
- Type: path
The shell to use for scripts run with the npm run command.
https://doc.codingdict.com/npm-ref/all.html#script-shell
これで無事に npm run dev
が実行できるようになりました。
ちなみに cross-env
を導入して解決する手段もあるらしい。
環境事に条件分岐させたい場合とかにはこれ使うのが良いのかもしれない。
知らんけど。
記事化したのでclose