在 Node JS 模块中使用 dotenv
Using dotenv in a Node JS module
我正在构建一个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
.就是这样。虽然我在这篇文章上迟到了,但希望这会有所帮助。
- Javascript,访问一个主要对象模块模式中的每个对象
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- 如何从模块链中调用函数.导出到节点中
- 尽管链接成功并已成功下载,但未找到NPM模块
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 从模块内部访问Express装载路径
- RequireJS向模块传递配置总是返回undefined
- Node.js正在更改应用程序以使用集群模块
- 在Meteor项目中安装并包含npm模块后出错
- 模块模式和这个
- 将依赖外部库的UMD模块与browserfy捆绑在一起
- 找不到模块捆绑包
- JavaScript命名约定;静态“;类或模块
- 显示模块模式在Knockout中设置模型的新实例
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- Javascript模块系统I'I’我正在努力,但搞不明白
- 如何捆绑循环相关模块
- 如何捆绑commonjs模块,除非指定需要
- 错误:$injector:modulerr模块错误(我的第一个SPA应用程序)
- 在 Node JS 模块中使用 dotenv