В Ubuntu это довольно просто; Я могу запустить приложение, используя:
$ NODE_ENV=production node myapp/app.js
Тем не менее, это не работает в Windows. Есть ли файл конфигурации, где я могу установить атрибут?
В Ubuntu это довольно просто; Я могу запустить приложение, используя:
$ NODE_ENV=production node myapp/app.js
Тем не менее, это не работает в Windows. Есть ли файл конфигурации, где я могу установить атрибут?
Ответы:
Текущие версии 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" }
.
echo %NODE_ENV%
чтобы проверить ее текущее значение.
cross-env
- лучшее решение этой проблемы, если ваша команда работает на смешанных операционных системах. Ответ от @MoOx будет моим выбором в качестве ответа на этот вопрос.
Я только что нашел хороший пакет Node.js, который может помочь в определении переменных среды с использованием уникального синтаксиса, кросс-платформенного.
https://www.npmjs.com/package/cross-env
Это позволит вам написать что-то вроде этого:
cross-env NODE_ENV=production my-command
Что довольно удобно! Больше никаких специфических команд для Windows или Unix!
В PowerShell:
$env:NODE_ENV="production"
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. Внимательно посмотрите на следующее и запустите точно так, как указано:
У вас есть эти два варианта:
В командной строке:
set NODE_ENV=production&&npm start
или
set NODE_ENV=production&&node index.js
Хитрость для того, чтобы он работал в 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"
}
Ты можешь использовать
npm run env NODE_ENV=production
Это, вероятно, лучший способ сделать это, потому что он совместим как с Windows, так и с Unix.
Из документации по скрипту выполнения npm :
Сценарий env - это специальная встроенная команда, которую можно использовать для отображения переменных среды, которые будут доступны сценарию во время выполнения. Если команда «env» определена в вашем пакете, она будет иметь приоритет над встроенной.
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
файл следующим образом:
<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.
Я написал модуль win-node-env, с помощью которого вы можете запускать свою команду так же, как в * nix.
NODE_ENV=production node myapp/app.js
Он работает путем создания переменной, NODE_ENV.cmd
которая устанавливает NODE_ENV
переменную окружения и порождает дочерний процесс с остальной частью команды и ее аргументами.
Просто установите его (глобально) и запустите команды сценария npm, они должны автоматически заставить их работать.
npm install -g win-node-env
Мой опыт использования 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.
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 (поскольку &&
это запрещено):
($env:NODE_ENV="production") -and (node myapp/app.js)
Обратите внимание, что вывод текста о том, что делает сервер, подавлен, и я не уверен, что это можно исправить. (Расширяя ответ @ jsalonen.)
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Для нескольких переменных среды .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
:
npm install --save dotenv-safe
.index.js
) и напрямую используйте его с process.env
командой :require('dotenv').load()
console.log(process.env.DB_HOST)
Не забудьте проигнорировать .env
файл в вашей VCS .
После этого ваша программа быстро завершится с ошибкой, если переменная, «определенная» в, .env.example
не установлена ни как переменная окружения, ни как .env
.
В случае, если вы используете терминал GITBASH
"set NODE_ENV=production"
не будет работать, что вы можете сделать, это типа «экспорт»NODE_ENV=production"
это не будет устанавливать переменную, но это полезно во многих случаях. Я не буду рекомендовать использовать это для производства, но это будет хорошо, если вы играете с npm.
npm install --production
Я использовал скрипт npm для запуска задачи gulp без "&&"
NODE_ENV = тестовые случаи npm run seed-db
Перезапустите код VS, если NODE_ENV или любая другая переменная среды не предоставляет правильное значение. Это должно работать после перезагрузки.