Как условно использовать переменную среды разработки или производства
Я получаю эту ошибку при запуске приложения узла:
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, где я определяю, в каком режиме начинать.
}
"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 ответа
Из обоих фрагментов и отображаемой ошибки вы, похоже, используете переменные, не объявляя их вначале.
Либо используйте переменные напрямую по их полному имени (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;
Это не правильный способ объявления переменных среды. Вы должны объявить переменную окружения, такую как: MAIL_HOST
Файл.env должен отличаться для каждой среды. В файле dev.env MAIL_HOST должен содержать URL-адрес разработки, а в файле.env MAIL_HOST должен содержать рабочий URL
Вы можете выбрать файл env с помощью библиотеки dotenv с помощью
require('dotenv').config();