Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在节点JS模块中使用dotenv_Javascript_Node.js_Npm_Node Modules - Fatal编程技术网

Javascript 在节点JS模块中使用dotenv

Javascript 在节点JS模块中使用dotenv,javascript,node.js,npm,node-modules,Javascript,Node.js,Npm,Node Modules,我正在构建一个节点应用程序,使用谷歌自定义搜索引擎(CSE)返回搜索结果 我将分离应用程序中向Google发送请求并将结果返回到模块中的部分 我已经在应用程序中使用来存储MongoDB凭据和应用程序的URL 我还想在模块中使用dotenv来存储googlecse ID和CSE的API键 我希望我的模块独立于主应用程序工作,但也希望在它是模块时使用主应用程序的dotenv文件 目前,我的模块结构如下所示: module | +-- node_modules | | | \-- dote

我正在构建一个节点应用程序,使用谷歌自定义搜索引擎(CSE)返回搜索结果

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

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

我还想在模块中使用dotenv来存储googlecse ID和CSE的API键

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

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

module
 |
 +-- node_modules
 |  |
 |  \-- dotenv
 |     |
 |     \-- (dotenv module's files....)
 |
 +-- .env
 |
 \-- 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模块在index.js文件中访问它们

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

module
 |
 +-- node_modules
 |  |
 |  \-- dotenv
 |     |
 |     \-- (dotenv module's files....)
 |
 +-- .env
 |
 \-- 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_模块”似乎正在从应用程序根目录中的.env文件中提取所需的变量。模块中没有.env文件


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

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

我相信dotenv自述文件中的这一部分,虽然没有确切的关联,但证实了这一点-

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


是的,你做得很对。整个项目中必须有一个.env文件。但是有一个技巧可以将它包含在不同的目录结构中。 例如: index.js文件位于/app/src中,而.env文件位于/app中。您的index.js文件包含以下内容

dotenv.config({path:...env})


您还可以使用dotenv.config({path:path.join(uu dirname,...env”)})

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

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