Переменная среды узла в Windows

Я заметил это странное поведение, которое не имеет большого значения, но меня чертовски раздражает.

В моем файле package.json в разделе «скрипты» есть запись «начало». Это выглядит так:

"scripts": {
    "start": "APPLICATION_ENV=development nodemon app.js"
}

ввод npm start на терминале Mac работает нормально, и nodemon запускает приложение с правильной переменной APPLICATION_ENV, как и ожидалось. Когда я пытаюсь сделать то же самое в среде Windows, я получаю следующую ошибку:

«APPLICATION_ENV» не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл».

Я пробовал оболочку git-bash и обычную командную строку Win CMD, то же самое.

Я нахожу это странным, потому что ввод команды непосредственно в терминал (без использования сценария package.json через запуск npm) работает нормально.

Кто-нибудь еще видел это и нашел решение? Спасибо!!


person Jason Fingar    schedule 24.05.2017    source источник


Ответы (2)


Для кросс-платформенного использования переменных среды в ваших скриптах установите и используйте cross-env.

"scripts": {
    "start": "cross-env APPLICATION_ENV=development nodemon app.js"
}

Проблема хорошо объяснена по ссылке, предоставленной cross-env. Он гласит:

Большинство командных строк Windows будут задыхаться, когда вы устанавливаете переменные среды с помощью NODE_ENV=production таким образом. (Исключением является Bash в Windows, который использует собственный Bash.) Точно так же есть разница в том, как команды Windows и POSIX используют переменные среды. В POSIX вы используете: $ENV_VAR, а в Windows вы используете %ENV_VAR%.

person RobC    schedule 25.05.2017

В итоге я использовал пакет dotenv на основе второго ответа здесь:

Node.js: настройка переменных среды

Мне это нравится, потому что это позволяет мне настраивать переменные среды без необходимости вводить дополнительный текст в строки сценария npm. Вместо этого они используют файл .env (который следует размещать в каждой среде и исключать из системы контроля версий).

person Jason Fingar    schedule 25.05.2017