如何使 .env 变量在 JS class 构造函数中工作?

How to make .env variables work inside JS class constructors?

我正在做一个 Node/Express 项目。大多数代码包含在文件夹内的文件中,因此名为 'controllers' 的文件夹包含项目的所有控制器,名为 'services' 的文件夹包含项目的所有服务等。开始的代码服务器位于一个名为 app.js 的文件中,该文件直接位于项目根目录中。

所有控制器和服务都声明为 JS classes 并包含一个构造函数。 Dotenv 在 app.js 中加载,env 变量在任何地方都能很好地工作,但在 class 构造函数中,因为它们似乎在 dotenv 初始化之前加载。

使用的 class 语法示例:

export default class exampleService {
    constructor() {
        console.log('This is not working', process.env.EXAMPLE); // process.env.EXAMPLE is undefined
    }

    myFunction() {
        console.log('This works just fine', process.env.EXAMPLE); // process.env.EXAMPLE is exactly how it's defined in .env
    }

    // All other class methods are here.
}

有没有办法让 dotenv 变量在 class 构造函数中工作 而无需 在每个 class 的开头导入和初始化 dotenv文件?

如果我确实求助于将 dotenv 单独导入每个 class 文件,除了使代码不那么干净之外,它还会有任何其他缺点吗?

尝试在 dotenv 上使用 preload 加载应用程序(从源代码复制):

预加载

您可以使用 --require (-r) 命令行选项预加载 dotenv。通过这样做,您不需要在应用程序代码中要求和加载 dotenv。这是使用 import 而不是 require 时的首选方法。

$ node -r dotenv/config your_script.js

支持以下配置选项作为命令行参数,格式为 dotenv_config_<option>=value

$ node -r dotenv/config your_script.js dotenv_config_path=/custom/path/to/your/env/vars

此外,您可以使用环境变量来设置配置选项。命令行参数将在这些之前。

$ DOTENV_CONFIG_<OPTION>=value node -r dotenv/config your_script.js
$ DOTENV_CONFIG_ENCODING=latin1 node -r dotenv/config your_script.js dotenv