【问题标题】:Using dotenv in a Node JS module在 Node JS 模块中使用 dotenv
【发布时间】:2016-07-01 17:28:11
【问题描述】:

我正在构建一个 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 文件中,并通过在应用程序的 index.js 中要求 dotenv 来访问这些变量。另外,“my_google_search_module”似乎正在从应用程序根目录中的 .env 文件中提取所需的变量。模块中没有 .env 文件。

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

【问题讨论】:

    标签: javascript node.js npm node-modules


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2018-02-27
          • 1970-01-01
          • 1970-01-01
          • 2013-08-30
          • 2021-08-29
          • 2018-12-06
          • 1970-01-01
          • 1970-01-01
          • 2015-08-21
          相关资源
          最近更新 更多