在 Node JS 模块中使用 dotenv

Using dotenv in a Node JS module

本文关键字:dotenv 模块 Node JS      更新时间:2023-09-26

我正在构建一个Node应用程序,该应用程序使用Google自定义搜索引擎(CSE)返回搜索结果。

我将分离将请求发送到Google并将结果返回到模块中的应用程序部分。

我已经在应用程序中使用dotenv来存储MongoDB凭据和应用程序的URL。

我还想在模块中使用dotenv来存储Google CSE ID和CSE的API密钥。

我希望我的模块独立于主应用程序工作,但也要使用主应用程序的 dotenv 文件,当它是一个模块时。

目前我的模块结构如下所示:

module
 |
 +-- node_modules
 |  |
 |  '-- dotenv
 |     |
 |     '-- (dotenv module's files....)
 |
 +-- .env
 |
 '-- index.js

这本身就完美地工作。.env 文件存储所需的环境变量,我可以通过要求 dotenv 模块在 index.js 文件中访问它们。

当包含在主应用程序中时,结构如下所示:

app
 |
 +-- node_modules
 |  |
 |  +-- dotenv
 |  |  |
 |  |  '-- (dotenv module's files....)
 |  |
 |  '-- my_google_search_module
 |     |
 |     +-- node_modules
 |     |  |
 |     |  +-- dotenv
 |     |     |
 |     |     '-- (dotenv module's files...)
 |     |
 |     '-- index.js
 |
 +-- .env
 |
 '-- index.js

这也行得通。我将所有环境变量存储在主应用程序的 .env 文件中,通过在应用程序的索引中要求 dotenv .js我可以访问这些变量。另外,"my_google_search_module"似乎正在从应用程序根目录的 .env 文件中提取其所需的变量。模块中没有 .env 文件。

我的问题是我这样做的方式是否正确?

我已经对此进行了进一步的研究,可以确认模块的.env正在从应用程序的.env文件中提取所需的环境变量。

我相信 dotenv 自述文件中的这一部分虽然不完全相关,但验证了 -https://www.npmjs.com/package/dotenv#what-happens-to-environment-variables-that-were-already-set

我们永远不会修改任何已经存在的环境变量 设置。特别是,如果您的 .env 文件中有一个变量 与环境中已存在的一个发生冲突,然后 变量将被跳过。此行为允许您覆盖所有 具有特定于计算机的环境的 .env 配置,尽管它 不推荐。

是的,你正在以正确的方式做。整个项目中必须有一个 .env 文件。但是有一个技巧可以将其包含在不同的目录结构中。例如:你的索引.js文件在/app/src 中,你的 .env 文件在/app 中.js。

dotenv.config({path: "../.env"});

您也可以使用 dotenv.config({path: path.join(__dirname, "../.env")});

对于节点项目,我建议使用npm包dotenv。您可以找到有关如何使用它的详细信息。不要忘记在项目文件的开头包含require('dotenv').config(),例如 index.js。

现在,您可以在任何需要的地方使用.env内容。例如,我希望我的服务器端口为 4000,我在.env中将其定义为 PORT=4000 .现在,要在任何地方使用.env变量,只需在后缀中提供变量名称,例如 process.env.PORT .就是这样。虽然我在这篇文章上迟到了,但希望这会有所帮助。