Как установить переменные среды из пакета.json [узел.js]
Как установить некоторые переменные окружения изнутри package.json для использования с npm start команды
вот что у меня сейчас есть в моем package.json:
{
...
"scripts": {
"help": "tagove help",
"start": "tagove start"
}
...
}
здесь я хочу установить переменные окружения (например,NODE_ENV) в сценарии запуска, все еще имея возможность запустить приложение только с одной командой, npm start.
6 ответов:
установите переменную окружения в команде скрипта:
... "scripts": { "start": "node app.js", "test": "NODE_ENV=test mocha --reporter spec" }, ...затем использовать
process.env.NODE_ENVв вашем приложении.Примечание: это для только для Mac и Linux. Для Windows обратитесь к комментариям.
просто используйте пакет NPM cross-env. Супер-легкий. Работает на Windows, Linux и всех окружающих. Обратите внимание, что вы не используете && для перехода к следующей задаче. Вы просто установите env, а затем запустите следующую задачу. Кредит на @mikekidder на предложение один из комментариев здесь.
из документации:
{ "scripts": { "build": "cross-env NODE_ENV=production OTHERFLAG=myValue webpack --config build/webpack.config.js" } }обратите внимание, что если вы хотите установить несколько глобальных vars, вы просто указываете их последовательно, а затем ваш команда должна быть выполнена.
В конечном счете, команда, которая выполняется (с помощью spawn) является:
webpack --config build/webpack.config.jsThe
NODE_ENVпеременная окружения будет установлена с помощью cross-env
Я просто хотел добавить свои два цента здесь для будущих исследователей узлов. На моем Ubuntu 14.04 the
NODE_ENV=testне получилось, пришлось использоватьexport NODE_ENV=testпосле чегоNODE_ENV=testначал работать, странно.на Windows, Как уже было сказано, вы должны использовать
set NODE_ENV=testно для кросс-платформенного решения библиотека cross-env, похоже, не сделала трюк, и вам действительно нужна библиотека для этого:export NODE_ENV=test|| set NODE_ENV=test&& yadda yaddaвертикальные полосы необходимы, так как в противном случае окна будут разбиваться на непризнанный
export NODE_ENVкоманда: D. Не знаю о конечном пространстве, но просто чтобы убедиться, что я их тоже удалил.
вдруг я обнаружил, что actionhero использует следующий код, который решил мою проблему, просто передав
--NODE_ENV=productionв опции команды запустить скрипт.if(argv['NODE_ENV'] != null){ api.env = argv['NODE_ENV']; } else if(process.env.NODE_ENV != null){ api.env = process.env.NODE_ENV; }Я был бы очень признателен, чтобы принять ответ от кого-то, кто знает более лучший способ установить переменные окружения в пакет.JSON или init-скрипт или что-то вроде, где приложение загружается кем-то другим.
хотя и не отвечая непосредственно на вопрос Id хотел бы поделиться идеей поверх других ответов. Из того, что я получил, каждый из них будет предлагать некоторый уровень сложности для достижения кросс-платформенной независимости.
в моем сценарии все, что я хотел, изначально, установить переменную для управления тем, следует ли защищать сервер с помощью аутентификации JWT (для целей разработки)
после прочтения ответов, я решил просто создать 2 разных файлов с аутентификация включена и выключена соответственно.
"scripts": { "dev": "nodemon --debug index_auth.js", "devna": "nodemon --debug index_no_auth.js", }файлы-это просто обертки, которые вызывают исходный индекс.JS-файл (который я переименовал в appbootstrapper.js):
//index_no_auth.js authentication turned off const bootstrapper = require('./appbootstrapper'); bootstrapper(false); //index_auth.js authentication turned on const bootstrapper = require('./appbootstrapper'); bootstrapper(true); class AppBootStrapper { init(useauth) { //real initialization } }возможно, это может помочь кому-то еще
вы не должны устанавливать переменные ENV в
package.json. actionhero используетNODE_ENVчтобы вы могли изменить параметры конфигурации, которые загружаются из файлов в./config. Проверьте redis config file, и посмотреть, как NODE_ENV используется для изменения параметров базы данных вNODE_ENV=testесли вы хотите использовать другие переменные ENV для установки вещей (возможно, порт HTTP), вам все равно не нужно ничего менять в
package.json. Например, если вы установитеPORT=1234в ENV и хотите использовать это как HTTP-порт вNODE_ENV=production, просто ссылайтесь на это в соответствующем файле конфигурации, т. е.:# in config/servers/web.js exports.production = { servers: { web: function(api){ return { port: process.env.PORT } } } }
Comments