Текущие версии Windows используют Powershell в качестве оболочки по умолчанию, поэтому используйте:
$env:NODE_ENV="production"
Per @ jsalonen ответ ниже. Если вы находитесь в CMD (который больше не поддерживается), используйте
set NODE_ENV=production
Это должно быть выполнено в командной строке, где вы собираетесь запустить приложение Node.js.
Приведенная выше строка устанавливает переменную среды NODE_ENV для командной строки, в которой вы выполняете команду.
Чтобы задать глобальные переменные среды таким образом, чтобы они сохранялись за пределами одной командной строки, вы можете найти инструмент в Системе на панели управления (или введя «среда» в поле поиска в меню «Пуск»).
Для тех, кто все еще борется с этим set NODE_ENV=production && node app. Удобнее настроить package.jsonсоответственно "scripts": { "start": "set NODE_ENV=production && node app" }.
Amberlamps
5
@ShuruiLiu команда не будет ничего выводить, но вы можете напечатать, echo %NODE_ENV%чтобы проверить ее текущее значение.
Яни Хартикайнен
169
Heads up: "set NODE_ENV = production &&" добавляет завершающий пробел к переменной. Мне нужно было "установить NODE_ENV = production &&", чтобы избежать дополнительного пространства, которое нарушает работу узловых приложений, таких как Ghost.
галка
12
@Amberlamps, это не очень хорошее решение, потому что NODE_ENV просто жестко закодирован для всех машин; настоящая цель - изменить env на машине с помощью переменной env или передать значение в командной строке, а не жестко закодировать его в файле package.json.
Александр Миллс
6
Я думаю, что использование cross-env- лучшее решение этой проблемы, если ваша команда работает на смешанных операционных системах. Ответ от @MoOx будет моим выбором в качестве ответа на этот вопрос.
Фил
230
Я только что нашел хороший пакет Node.js, который может помочь в определении переменных среды с использованием уникального синтаксиса, кросс-платформенного.
set NODE_ENV=productionне работал для меня в PowerShell, но это сработало. Спасибо!
ярость
6
Немного постарался заставить его работать с Powershell в коде Visual Studio. Думаю, я оставлю решение здесь. Я пытался запустить команду "Gulp", при этом было установлено правильное значение env. Вот что получилось у меня работать $env:NODE_ENV="development"; gulp runMytask. Обратите внимание на точку с запятой там. Файл gulp может использовать условную логику для process.env.NODE_ENV. Если вы не установите его, он будет неопределенным.
dvsoukup
2
У меня работает только это решение с windows 10 и webpack 3.8.1
Роман Арсеньев
1
Это работает отлично. Но эта cross-env NODE_ENV=productionопция действительно лучше, если запускать команды npm из package.json, для которых требуется установить env. Слишком легко оставить набор env в dev / prod после использования опции $ env: NODE_ENV
Drenai
105
Было бы идеально, если бы вы могли установить параметры в той же строке, что и ваш вызов, чтобы запустить Node.js в Windows. Внимательно посмотрите на следующее и запустите точно так, как указано:
У вас есть эти два варианта:
В командной строке:
set NODE_ENV=production&&npm start
или
set NODE_ENV=production&&node index.js
Хитрость для того, чтобы он работал в Windows, заключается в том, что вам нужно удалить пробел до и после «&&». Сконфигурировал ваш файл package.json с помощью start_windows (см. Ниже) ниже. Затем запустите «npm run start_windows» в командной строке.
Хотел бы DEF знать, как заставить его работать таким образом.
SC_Chupacabra
2
Работал на меня. Пришлось удалить пробелы, хотя "set NODE_ENV = production && nodemon server.js"
SC_Chupacabra
2
Жаль, что я прочитал это далеко, прежде чем пытаться ответить выше, спас бы меня некоторое время. : \
Джефф
1
На смутно связанной ноте я обнаружил, что && не работает должным образом в окнах при объединении нескольких команд в цепочку. Если есть сомнения, попробуйте использовать | вместо этого
Майк
1
у меня это работало на 64-битной машине windows 10 от cmd и power-shell
Ани
30
Ты можешь использовать
npm run env NODE_ENV=production
Это, вероятно, лучший способ сделать это, потому что он совместим как с Windows, так и с Unix.
Сценарий env - это специальная встроенная команда, которую можно использовать для отображения переменных среды, которые будут доступны сценарию во время выполнения. Если команда «env» определена в вашем пакете, она будет иметь приоритет над встроенной.
Как мы можем выполнить другую команду с установленной переменной? Это не похоже на работу: npm run env NODE_ENV = production && echo $ NODE_ENV. Возможно они выполнены в двух разных оболочках?
Йонас Келло
1
Из того, что я вижу, это не работает вообще. Из самой документации, он только перечисляет переменные среды, а не устанавливает их.
kumarharsh
2
Не работает для меня. В нем перечислены переменные, покажите указанную вами переменную, но во время выполнения
переменная не годится
3
@JonasKello Вы могли бы использовать это: является обязательным . Замените на любую команду, которую вы хотите. npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'--node -e 'console.log(process.env.NODE_ENV)'
Пауан
Попробовал это с помощью этой команды: npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.jsи ... ничего не произошло. Я не уверен, что этот метод работает на Windows.
Jcollum
14
Если вы используете Visual Studio с NTVS, вы можете установить переменные среды на странице свойств проекта:
Как видите, раскрывающиеся списки «Конфигурация» и «Платформа» отключены (я не слишком задумывался над этим), но если вы отредактируете свой .njsprojфайл следующим образом:
Я написал модуль win-node-env, с помощью которого вы можете запускать свою команду так же, как в * nix.
NODE_ENV=production node myapp/app.js
Он работает путем создания переменной, NODE_ENV.cmdкоторая устанавливает NODE_ENVпеременную окружения и порождает дочерний процесс с остальной частью команды и ее аргументами.
Просто установите его (глобально) и запустите команды сценария npm, они должны автоматически заставить их работать.
именно то, что я искал! работать со сценариями npm, и он даже работает с другими инструментами cli узла, такими как jest. Так что "set NODE_ENV = debug & cls & jest ..." стало "cls & NODE_ENV = debug jest"
З. Халла,
9
Мой опыт использования Node.js в 64-битной Windows 7 в Visual Studio 2013 заключается в том, что вам нужно использовать
setx NODE_ENV development
из окна cmd. И вы должны перезапустить Visual Studio, чтобы новое значение было распознано.
Заданный синтаксис действует только в течение времени окна cmd, в котором он установлен.
cmd- не PowerShell? Тьфу, давай на окна, соберись.
Jcollum
Ваше замечание о перезапуске кода VS было действительно полезным!
Юрий Козлов
8
Вот метод без командной строки:
В Windows 7 или 10 введите environment в поле поиска меню «Пуск» и выберите «Изменить системные переменные среды».
Либо перейдите в Панель управления \ Система и безопасность \ Система и нажмите Дополнительные параметры системы.
Это должно открыть диалоговое окно «Свойства системы» с выбранной вкладкой «Дополнительно». Внизу вы увидите кнопку Переменные среды ... Нажмите это.
Откроется диалоговое окно «Переменные среды».
Внизу, под Системные переменные, выберите New ... Откроется диалоговое окно New System Variable.
Введите имя и значение переменной и нажмите ОК.
Вам нужно будет закрыть все запросы cmd и перезапустить сервер, чтобы новая переменная была доступна для process.env. Если он по-прежнему не отображается, перезагрузите компьютер.
Спасибо! Я сделал все это, но это не работало, пока я не перезапустил сервер.
Марсель Ламот
7
Просто чтобы уточнить, и для кого-то еще, кто может вырывать свои волосы ...
Если вы используете git bash в Windows , set node_env=production&& node whatever.jsпохоже, не работает . Вместо этого используйте родной cmd. Затем, используя set node_env=production&& node whatever.jsработает, как ожидалось.
Мой вариант использования:
Я занимаюсь разработкой на Windows, потому что мой рабочий процесс намного быстрее, но мне нужно было убедиться, что связующее ПО для разработки моего приложения не сработало в производственной среде.
После этого ваша программа быстро завершится с ошибкой, если переменная, «определенная» в, .env.exampleне установлена ни как переменная окружения, ни как .env.
Файлы .env удобны только для секретов и добавляют дополнительный уровень сложности при настройке при назначении новых людей в проект или внесении в них изменений.
Coiso
@coiso Без общего, общего места, куда вы помещаете много переменных env? Либо в файле скрипта, либо в зависимой от IDE настройке вы еще более привязаны к конкретным инструментам. Это делает интеграцию новых членов команды еще более сложной, я думаю.
Доминик
2
В случае, если вы используете терминал GITBASH
"set NODE_ENV=production"
не будет работать, что вы можете сделать, это типа «экспорт»NODE_ENV=production"
это не будет устанавливать переменную, но это полезно во многих случаях. Я не буду рекомендовать использовать это для производства, но это будет хорошо, если вы играете с npm.
Ответы:
Текущие версии Windows используют Powershell в качестве оболочки по умолчанию, поэтому используйте:
Per @ jsalonen ответ ниже. Если вы находитесь в CMD (который больше не поддерживается), используйте
Это должно быть выполнено в командной строке, где вы собираетесь запустить приложение Node.js.
Приведенная выше строка устанавливает переменную среды NODE_ENV для командной строки, в которой вы выполняете команду.
Чтобы задать глобальные переменные среды таким образом, чтобы они сохранялись за пределами одной командной строки, вы можете найти инструмент в Системе на панели управления (или введя «среда» в поле поиска в меню «Пуск»).
источник
set NODE_ENV=production && node app
. Удобнее настроитьpackage.json
соответственно"scripts": { "start": "set NODE_ENV=production && node app" }
.echo %NODE_ENV%
чтобы проверить ее текущее значение.cross-env
- лучшее решение этой проблемы, если ваша команда работает на смешанных операционных системах. Ответ от @MoOx будет моим выбором в качестве ответа на этот вопрос.Я только что нашел хороший пакет Node.js, который может помочь в определении переменных среды с использованием уникального синтаксиса, кросс-платформенного.
https://www.npmjs.com/package/cross-env
Это позволит вам написать что-то вроде этого:
Что довольно удобно! Больше никаких специфических команд для Windows или Unix!
источник
В PowerShell:
источник
set NODE_ENV=production
не работал для меня в PowerShell, но это сработало. Спасибо!$env:NODE_ENV="development"; gulp runMytask
. Обратите внимание на точку с запятой там. Файл gulp может использовать условную логику для process.env.NODE_ENV. Если вы не установите его, он будет неопределенным.cross-env NODE_ENV=production
опция действительно лучше, если запускать команды npm из package.json, для которых требуется установить env. Слишком легко оставить набор env в dev / prod после использования опции $ env: NODE_ENVБыло бы идеально, если бы вы могли установить параметры в той же строке, что и ваш вызов, чтобы запустить Node.js в Windows. Внимательно посмотрите на следующее и запустите точно так, как указано:
У вас есть эти два варианта:
В командной строке:
или
Хитрость для того, чтобы он работал в Windows, заключается в том, что вам нужно удалить пробел до и после «&&». Сконфигурировал ваш файл package.json с помощью start_windows (см. Ниже) ниже. Затем запустите «npm run start_windows» в командной строке.
источник
Ты можешь использовать
Это, вероятно, лучший способ сделать это, потому что он совместим как с Windows, так и с Unix.
Из документации по скрипту выполнения npm :
источник
npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'
--
node -e 'console.log(process.env.NODE_ENV)'
npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js
и ... ничего не произошло. Я не уверен, что этот метод работает на Windows.Если вы используете Visual Studio с NTVS, вы можете установить переменные среды на странице свойств проекта:
Как видите, раскрывающиеся списки «Конфигурация» и «Платформа» отключены (я не слишком задумывался над этим), но если вы отредактируете свой
.njsproj
файл следующим образом:Затем выпадающий список «Отладка / Выпуск» будет управлять настройкой переменной перед запуском Node.js.
источник
Я написал модуль win-node-env, с помощью которого вы можете запускать свою команду так же, как в * nix.
Он работает путем создания переменной,
NODE_ENV.cmd
которая устанавливаетNODE_ENV
переменную окружения и порождает дочерний процесс с остальной частью команды и ее аргументами.Просто установите его (глобально) и запустите команды сценария npm, они должны автоматически заставить их работать.
источник
Мой опыт использования Node.js в 64-битной Windows 7 в Visual Studio 2013 заключается в том, что вам нужно использовать
из окна cmd. И вы должны перезапустить Visual Studio, чтобы новое значение было распознано.
Заданный синтаксис действует только в течение времени окна cmd, в котором он установлен.
Простой тест в Node.js:
Он возвращает «undefined» при использовании set и возвращает «development» при использовании setx и перезапуске Visual Studio.
источник
cmd
- не PowerShell? Тьфу, давай на окна, соберись.Вот метод без командной строки:
В Windows 7 или 10 введите environment в поле поиска меню «Пуск» и выберите «Изменить системные переменные среды».
Либо перейдите в Панель управления \ Система и безопасность \ Система и нажмите Дополнительные параметры системы.
Это должно открыть диалоговое окно «Свойства системы» с выбранной вкладкой «Дополнительно». Внизу вы увидите кнопку Переменные среды ... Нажмите это.
Откроется диалоговое окно «Переменные среды».
Внизу, под Системные переменные, выберите New ... Откроется диалоговое окно New System Variable.
Введите имя и значение переменной и нажмите ОК.
Вам нужно будет закрыть все запросы cmd и перезапустить сервер, чтобы новая переменная была доступна для process.env. Если он по-прежнему не отображается, перезагрузите компьютер.
источник
Просто чтобы уточнить, и для кого-то еще, кто может вырывать свои волосы ...
Если вы используете git bash в Windows ,
set node_env=production&& node whatever.js
похоже, не работает . Вместо этого используйте родной cmd. Затем, используяset node_env=production&& node whatever.js
работает, как ожидалось.Мой вариант использования:
Я занимаюсь разработкой на Windows, потому что мой рабочий процесс намного быстрее, но мне нужно было убедиться, что связующее ПО для разработки моего приложения не сработало в производственной среде.
источник
Чтобы запустить ваше приложение в PowerShell (поскольку
&&
это запрещено):Обратите внимание, что вывод текста о том, что делает сервер, подавлен, и я не уверен, что это можно исправить. (Расширяя ответ @ jsalonen.)
источник
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
первый тип PowerShell
затем введите
Он будет отлично работать, отображая все результаты.
источник
Для нескольких переменных среды
.env
файл более удобен:Это легко использовать с
dotenv-safe
:npm install --save dotenv-safe
.index.js
) и напрямую используйте его сprocess.env
командой :Не забудьте проигнорировать
.env
файл в вашей VCS .После этого ваша программа быстро завершится с ошибкой, если переменная, «определенная» в,
.env.example
не установлена ни как переменная окружения, ни как.env
.источник
В случае, если вы используете терминал GITBASH
"set NODE_ENV=production"
не будет работать, что вы можете сделать, это типа «экспорт»NODE_ENV=production"
источник
это не будет устанавливать переменную, но это полезно во многих случаях. Я не буду рекомендовать использовать это для производства, но это будет хорошо, если вы играете с npm.
источник
Я использовал скрипт npm для запуска задачи gulp без "&&"
NODE_ENV = тестовые случаи npm run seed-db
источник
Перезапустите код VS, если NODE_ENV или любая другая переменная среды не предоставляет правильное значение. Это должно работать после перезагрузки.
источник