如何有条件地使用开发或生产环境变量
How to conditionally use a development or production environment variable
我在启动节点应用程序时收到此错误:
ReferenceError: DEV_MAIL_HOST is not defined
当我专门定义要使用的环境变量时,以下代码有效。
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
}
});
但是,我正在尝试根据 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 的评论。我需要解构我的环境变量。
这不是声明环境变量的正确方法。您应该声明一个环境变量,例如:MAIL_HOST
.env 文件对于每个环境应该是不同的。在 dev .env 文件中 MAIL_HOST 应该包含开发 URL 而在生产 .env 文件中 MAIL_HOST 应该包含生产 URL
您可以使用dotenv库选择env文件,使用
require('dotenv').config();
从两个片段和显示的错误来看,您似乎在使用变量时没有先声明它们。
要么直接使用变量的全名(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;
我在启动节点应用程序时收到此错误:
ReferenceError: DEV_MAIL_HOST is not defined
当我专门定义要使用的环境变量时,以下代码有效。
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
}
});
但是,我正在尝试根据 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 的评论。我需要解构我的环境变量。
这不是声明环境变量的正确方法。您应该声明一个环境变量,例如:MAIL_HOST
.env 文件对于每个环境应该是不同的。在 dev .env 文件中 MAIL_HOST 应该包含开发 URL 而在生产 .env 文件中 MAIL_HOST 应该包含生产 URL
您可以使用dotenv库选择env文件,使用
require('dotenv').config();
从两个片段和显示的错误来看,您似乎在使用变量时没有先声明它们。
要么直接使用变量的全名(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;