Как установить переменные среды из пакета.в JSON [узел.Яш]
Как установить некоторые переменные окружения изнутри 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 кросс-ОКР. Супер-легкий. Работает в 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.js
на NODE_ENV
переменная окружения будет установлена с помощью cross-env
Я просто хотел добавить свои два цента здесь для будущих исследователей узлов. На моем Ubuntu 14.04 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
command: 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, и посмотреть, как 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
}
}
}
}