Javascript 如何使.env变量在JS类构造函数中工作?
我正在做一个Node/Express项目。大多数代码都包含在文件夹中的文件中,因此名为“controllers”的文件夹包含项目的所有控制器,名为“services”的文件夹包含项目的所有服务等。启动服务器的代码位于名为Javascript 如何使.env变量在JS类构造函数中工作?,javascript,node.js,express,dotenv,Javascript,Node.js,Express,Dotenv,我正在做一个Node/Express项目。大多数代码都包含在文件夹中的文件中,因此名为“controllers”的文件夹包含项目的所有控制器,名为“services”的文件夹包含项目的所有服务等。启动服务器的代码位于名为app.js的文件中,该文件直接位于项目根目录中 所有控制器和服务都声明为JS类并包含构造函数。Dotenv在app.js中加载,env变量在任何地方都能很好地工作,但在类构造函数中除外,因为这些变量似乎是在Dotenv初始化之前加载的 使用的类语法示例如下: export de
app.js
的文件中,该文件直接位于项目根目录中
所有控制器和服务都声明为JS类并包含构造函数。Dotenv在app.js
中加载,env变量在任何地方都能很好地工作,但在类构造函数中除外,因为这些变量似乎是在Dotenv初始化之前加载的
使用的类语法示例如下:
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变量在类构造函数中工作而不必在每个类文件的开头导入和初始化dotenv
如果我单独将dotenv导入到每个类文件中,除了使代码不那么干净之外,还会有其他缺点吗?尝试使用on dotenv(从源代码复制)加载应用程序: 预加载 可以使用--require(-r)命令行选项预加载dotenv。这样,您就不需要在应用程序代码中要求并加载dotenv。这是使用导入而不是require时的首选方法
$ node -r dotenv/config your_script.js
以下配置选项作为命令行参数受支持,格式为dotenv\u config\u=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
$DOTENV\u CONFIG\u=value节点-r DOTENV/CONFIG your\u script.js
$DOTENV_CONFIG_ENCODING=latin1节点-r DOTENV/CONFIG your_script.js DOTENV
From:“尽可能早地在应用程序中,要求并配置dotenv.require('dotenv').config()
”-您是否尝试将其作为第一个导入添加到server.js/app.js(或您的package.json指向的任何文件)?@alfasin我尝试过,是的。即使从“dotenv”导入dotenv代码>和const env=dotenv.config()代码>是app.js中的第一行。env变量在构造函数中不起作用。是否使用on dotenv加载应用程序?@alfasin我没有。我现在是,虽然,因为预加载显然解决了这个问题。谢谢你想发布一个关于.env预加载的答案,这样我就可以把它标记为一个解决方案了吗?谢谢,回答得很好!对于解决此问题的其他人,如果您使用esm,请确保在esm之前要求使用dotenv:node-r dotenv/config-r esm app.js
。