Closed5

Windows環境でnpmのscripts実行時に環境変数の構文エラーが出る

unsoluble_sugarunsoluble_sugar

普段Mac環境で開発しているNext.jsプロジェクトをWindowsで動かそうと思ったところ、npm run devの実行時に構文エラーが発生した。

'PORT' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

コマンドはgit-bash上で実行。

unsoluble_sugarunsoluble_sugar

該当の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

unsoluble_sugarunsoluble_sugar

以下いずれかの方法にて解決を確認。今回は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 が実行できるようになりました。

このスクラップは2023/08/14にクローズされました