ENV在分布式Node系统中的正确使用

Ale*_*eks 5 environment-variables distributed-system node.js

我正在构建一个相对复杂的分布式节点系统。假设有两个进程(节点应用程序),A 和 B。它们在不同的项目中定义。

此外,还有一些定制的节点模块,在 A 和 B 中使用。我们称它们为 M 和 N。此外,M 使用 N。

我应该如何正确处理环境变量?

我想我应该为两个主要进程(A 和 B)定义 .env,从那里处理所有 ENV 变量,然后简单地将所需的 env 变量从那里传递到 M 和 N。这样,M 和 N(以及其他内部模块) 将接收它们自己的 ENV 变量作为创建时的参数传递。

这种方法是否正确?

gea*_*ser 2

让模块直接访问process.env并不是一个好主意,而模块拥有自己的.env文件则是一个更糟糕的主意。

  • .env文件不应添加到源代码管理(即 git)中,因为它们会随着环境dev、、)而变化,prod并且pre-prod有时包含敏感信息(如 AWS 密钥).env因此,这将需要您在每次安装时粘贴文件,node_modules从而使部署过程更加复杂。

  • .env模块内加载的文件可能会以意想不到的方式与根应用程序的文件合并(.env记住只有一个process.env

  • 想象一下这样一种情况,您的模块需要在应用程序的两个部分中表现不同。如何.env仅在一处覆盖通过文件加载的数据?

所以在我看来,你的猜测是正确的:不要.env输入node_modules.

// This is better...
nModule.someMethod(process.env.PARAM1, process.env.PARAM2);

// ...than this
process.env.PARAM1 = '';
process.env.PARAM2 = '';

nModule.someMethod();
Run Code Online (Sandbox Code Playgroud)