Как я могу установить NODE_ENV = производство в Windows?

340

В Ubuntu это довольно просто; Я могу запустить приложение, используя:

$ NODE_ENV=production node myapp/app.js

Тем не менее, это не работает в Windows. Есть ли файл конфигурации, где я могу установить атрибут?

разъем
источник
Для решения мультиплатформенной вы можете найти ответ stackoverflow.com/a/57509175/11127383
Daniel Danielecki

Ответы:

486

Текущие версии Windows используют Powershell в качестве оболочки по умолчанию, поэтому используйте:

$env:NODE_ENV="production"

Per @ jsalonen ответ ниже. Если вы находитесь в CMD (который больше не поддерживается), используйте

set NODE_ENV=production

Это должно быть выполнено в командной строке, где вы собираетесь запустить приложение Node.js.

Приведенная выше строка устанавливает переменную среды NODE_ENV для командной строки, в которой вы выполняете команду.

Чтобы задать глобальные переменные среды таким образом, чтобы они сохранялись за пределами одной командной строки, вы можете найти инструмент в Системе на панели управления (или введя «среда» в поле поиска в меню «Пуск»).

Яни Хартикайнен
источник
112
Для тех, кто все еще борется с этим 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, который может помочь в определении переменных среды с использованием уникального синтаксиса, кросс-платформенного.

https://www.npmjs.com/package/cross-env

Это позволит вам написать что-то вроде этого:

cross-env NODE_ENV=production my-command

Что довольно удобно! Больше никаких специфических команд для Windows или Unix!

MoOx
источник
25
Пока первый ответ верный. Я думаю, что этот ответ является наиболее надежным и должен использоваться
d4rklit3
Это отличное решение!
Кирилл Гусятин
Просто и отлично решает мою проблему. Я смог построить только на Linux. Это решается как Linux, так и Windows.
tista3
Этот ответ заслуживает большей любви, должен быть принят :)
Honza Kalfus
Это лучший ответ и для меня
knaos
166

В PowerShell:

$env:NODE_ENV="production"
jsalonen
источник
4
PS: не забывайте $ и кавычки;)
Джордж
6
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. Внимательно посмотрите на следующее и запустите точно так, как указано:

У вас есть эти два варианта:

  1. В командной строке:

    set NODE_ENV=production&&npm start

    или

    set NODE_ENV=production&&node index.js
  2. Хитрость для того, чтобы он работал в Windows, заключается в том, что вам нужно удалить пробел до и после «&&». Сконфигурировал ваш файл package.json с помощью start_windows (см. Ниже) ниже. Затем запустите «npm run start_windows» в командной строке.

    //package.json
    
    "scripts": {
      "start": "node index.js"
      "start_windows": "set NODE_ENV=production&&node index.js"
    }
Александр Миллс
источник
1
Хотел бы 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.

Из документации по скрипту выполнения npm :

Сценарий env - это специальная встроенная команда, которую можно использовать для отображения переменных среды, которые будут доступны сценарию во время выполнения. Если команда «env» определена в вашем пакете, она будет иметь приоритет над встроенной.

Бриек П
источник
3
Как мы можем выполнить другую команду с установленной переменной? Это не похоже на работу: 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, вы можете установить переменные среды на странице свойств проекта:

Свойства проекта Visual Studio NTVS

Как видите, раскрывающиеся списки «Конфигурация» и «Платформа» отключены (я не слишком задумывался над этим), но если вы отредактируете свой .njsprojфайл следующим образом:

  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=development</Environment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=production</Environment>
  </PropertyGroup>

Затем выпадающий список «Отладка / Выпуск» будет управлять настройкой переменной перед запуском Node.js.

Павел
источник
13

Я написал модуль win-node-env, с помощью которого вы можете запускать свою команду так же, как в * nix.

NODE_ENV=production node myapp/app.js

Он работает путем создания переменной, NODE_ENV.cmdкоторая устанавливает NODE_ENVпеременную окружения и порождает дочерний процесс с остальной частью команды и ее аргументами.

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

npm install -g win-node-env
laggingreflex
источник
именно то, что я искал! работать со сценариями 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, в котором он установлен.

Простой тест в Node.js:

console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);

Он возвращает «undefined» при использовании set и возвращает «development» при использовании setx и перезапуске Visual Studio.

edhubbell
источник
cmd- не PowerShell? Тьфу, давай на окна, соберись.
Jcollum
Ваше замечание о перезапуске кода VS было действительно полезным!
Юрий Козлов
8

Вот метод без командной строки:

В Windows 7 или 10 введите environment в поле поиска меню «Пуск» и выберите «Изменить системные переменные среды».

Либо перейдите в Панель управления \ Система и безопасность \ Система и нажмите Дополнительные параметры системы.

Это должно открыть диалоговое окно «Свойства системы» с выбранной вкладкой «Дополнительно». Внизу вы увидите кнопку Переменные среды ... Нажмите это.

Системное диалоговое окно

Откроется диалоговое окно «Переменные среды».

Диалоговое окно «Переменная среды»

Внизу, под Системные переменные, выберите New ... Откроется диалоговое окно New System Variable.

введите описание изображения здесь

Введите имя и значение переменной и нажмите ОК.

Вам нужно будет закрыть все запросы cmd и перезапустить сервер, чтобы новая переменная была доступна для process.env. Если он по-прежнему не отображается, перезагрузите компьютер.

Mattatat-тат
источник
2
Спасибо! Я сделал все это, но это не работало, пока я не перезапустил сервер.
Марсель Ламот
7

Просто чтобы уточнить, и для кого-то еще, кто может вырывать свои волосы ...

Если вы используете git bash в Windows , set node_env=production&& node whatever.js похоже, не работает . Вместо этого используйте родной cmd. Затем, используя set node_env=production&& node whatever.jsработает, как ожидалось.

Мой вариант использования:

Я занимаюсь разработкой на Windows, потому что мой рабочий процесс намного быстрее, но мне нужно было убедиться, что связующее ПО для разработки моего приложения не сработало в производственной среде.

pstrawberriedev
источник
6

Чтобы запустить ваше приложение в PowerShell (поскольку &&это запрещено):

($env:NODE_ENV="production") -and (node myapp/app.js)

Обратите внимание, что вывод текста о том, что делает сервер, подавлен, и я не уверен, что это можно исправить. (Расширяя ответ @ jsalonen.)

Кэмерон Йик
источник
Это не сработало для меня:"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Эвандро Поматти
4

первый тип PowerShell

$env:NODE_ENV="production"

затем введите

node fileName.js

Он будет отлично работать, отображая все результаты.

Abhinav
источник
2

Для нескольких переменных среды .envфайл более удобен:

# .env.example, committed to repo
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
# .env, private, .gitignore it
DB_HOST=real-hostname.example.com
DB_USER=real-user-name
DB_PASS=REAL_PASSWORD

Это легко использовать с dotenv-safe:

  1. Установить с npm install --save dotenv-safe.
  2. Включите его в свой код (лучше всего в начале index.js) и напрямую используйте его с process.envкомандой :
require('dotenv').load()
console.log(process.env.DB_HOST)   

Не забудьте проигнорировать .envфайл в вашей VCS .

После этого ваша программа быстро завершится с ошибкой, если переменная, «определенная» в, .env.exampleне установлена ​​ни как переменная окружения, ни как .env.

Dominik
источник
Файлы .env удобны только для секретов и добавляют дополнительный уровень сложности при настройке при назначении новых людей в проект или внесении в них изменений.
Coiso
@coiso Без общего, общего места, куда вы помещаете много переменных env? Либо в файле скрипта, либо в зависимой от IDE настройке вы еще более привязаны к конкретным инструментам. Это делает интеграцию новых членов команды еще более сложной, я думаю.
Доминик
2

В случае, если вы используете терминал GITBASH "set NODE_ENV=production" не будет работать, что вы можете сделать, это типа «экспорт»NODE_ENV=production"

Bozhinovski
источник
0

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

npm install --production
Бар Horing
источник
0

Я использовал скрипт npm для запуска задачи gulp без "&&"

NODE_ENV = тестовые случаи npm run seed-db

Мари орлова
источник
0

Перезапустите код VS, если NODE_ENV или любая другая переменная среды не предоставляет правильное значение. Это должно работать после перезагрузки.

Ракеш Пахуджа
источник