问题描述
我正在尝试在我的节点服务器上使用 dotenv 实现环境变量,但是我无法从位于根目录的 .env 文件中加载它们。当我运行 const dotenv = require("dotenv").config({debug: true});
时,我遇到以下消息:"USER" is already defined in process.env and will not be overwritten
此外,当我尝试加载页面时,它遇到以下错误:ER_dbaccess_DENIED_ERROR: Access denied for user ''@'localhost' to database '_api'
.env:
USER=root
PASS=
解决方法
来自Variables overwriting/priority。
已经设置的环境变量不会被覆盖,这意味着命令行变量的优先级高于所有在 env 文件中定义的变量;
还有这个What happens to environment variables that were already set?
我们绝不会修改任何已经设置的环境变量。特别是,如果 .env 文件中有一个变量与环境中已经存在的变量发生冲突,那么该变量将被跳过。此行为允许您使用特定于机器的环境覆盖所有 .env 配置,但不建议这样做。
如果你想覆盖 process.env,你可以这样做:
const fs = require('fs')
const dotenv = require('dotenv')
const envConfig = dotenv.parse(fs.readFileSync('.env.override'))
for (const k in envConfig) {
process.env[k] = envConfig[k]
}