Как условно использовать переменную среды разработки или производства - PullRequest
0 голосов
/ 07 февраля 2019

Я получаю эту ошибку при запуске приложения узла:

ReferenceError: DEV_MAIL_HOST is not defined

Следующий код работает, когда я специально определяю, какую переменную env использовать.

const transport = nodemailer.createTransport({
   host: process.env.DEV_MAIL_HOST,
   port: process.env.DEV_MAIL_PORT,
   auth: {
     user: process.env.DEV_MAIL_USER,
     pass: process.env.DEV_MAIL_PASSWORD
   }
 });

Однако я пытаюсь условно ввести переменные env в зависимости от того, в каком режиме запускается Node.

const transport = nodemailer.createTransport({
  host: process.env.NODE_ENV === "development" ? DEV_MAIL_HOST : LIVE_MAIL_HOST,
  port: process.env.NODE_ENV === "development" ? DEV_MAIL_PORT : LIVE_MAIL_PORT,
  auth: {
    user:
      process.env.NODE_ENV === "development" ? DEV_MAIL_USER : LIVE_MAIL_USER,
    pass:
      process.env.NODE_ENV === "development"
        ? DEV_MAIL_PASSWORD
        : LIVE_MAIL_PASSWORD
  }
});

Вот мой package.json, где я определяю, какой режим запускатьin.

 } 
"scripts": {
    "start": "nodemon -e js,graphql -x  NODE_ENV=production node src/index.js",
    "dev": "nodemon -e js,graphql -x NODE_ENV=development node --inspect src/index.js",
 }
}

Что мне здесь не хватает?

Исправлено благодаря комментарию @ MadWard.Мне нужно было деструктурировать переменные среды.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Из обоих фрагментов и отображаемой ошибки вы, похоже, используете переменные, не объявляя их вначале.

Либо используйте переменные напрямую по их полному имени (process.env.DEV_MAIL_HOST и т. Д.), Либо инициализируйтеих в начале вашего кода:

const { 
    DEV_MAIL_HOST, 
    DEV_MAIL_PORT, 
    DEV_MAIL_USER,
    DEV_MAIL_PASSWORD,
    LIVE_MAIL_HOST, 
    LIVE_MAIL_PORT, 
    LIVE_MAIL_USER, 
    LIVE_MAIL_PASSWORD
} = process.env;
0 голосов
/ 07 февраля 2019

Это неправильный способ объявления переменных окружения.Вы должны объявить переменную среды, например: MAIL_HOST

.env, файл должен быть разным для каждой среды.В файле dev .env MAIL_HOST должен содержать URL-адрес разработки, а в рабочем файле .env MAIL_HOST должен содержать рабочий URL-адрес

. Вы можете выбрать файл env с помощью библиотеки dotenv с помощью

require('dotenv').config();
...