Dotenv无法覆盖键值对

S. *_*ler 4 javascript node.js dotenv

我正在尝试在节点服务器上使用 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=
Run Code Online (Sandbox Code Playgroud)

sli*_*wp2 7

来自变量覆盖/优先级

已经设置的环境变量不会被覆盖,这意味着命令行变量比 env 文件中定义的所有变量具有更高的优先级;

已经设置的环境变量会发生什么

我们永远不会修改任何已经设置的环境变量。特别是,如果 .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]
}
Run Code Online (Sandbox Code Playgroud)