在Node JS模块

时间:2016-03-16 01:46:45

标签: javascript node.js npm node-modules

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

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

我已在应用中使用dotenv来存储MongoDB凭据和应用的网址。

我还想在模块中使用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文件。

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

3 个答案:

答案 0 :(得分:0)

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

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

  

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

答案 1 :(得分:0)

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

dotenv.config({path:“../。env”});

你也可以使用dotenv.config({path:path.join(__ dirname,“.. /。env”)});

答案 2 :(得分:0)

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

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