Node.js:process.env和global有何不同?

13

设置环境变量如 process.env.thing = 42 和创建全局变量如 global.thing = 42 有何不同?

什么情况下会优先选择使用 process.env.thing 而不是 global?两者各有什么利弊?


processglobals是Node中全局可访问的变量。将thing附加到任何一个变量上只意味着将其附加到不同的对象上。您能稍微澄清一下您的问题吗?您具体想问什么? - zero298
正如你所说,一个是环境变量,另一个是由你的程序设置的。使用 process.env,你可以读取系统环境中设置的变量。例如... THING=42 node server.js - F.bernal
4个回答

10

global 是全局对象。因为 processglobal 的一个属性,所以它可以在全局范围内使用。实际上:

global.process === process //-> true

process.env具有设置为系统环境变量的属性。这些可以在Node之外以各种方式设置,并通过访问process.env的属性来读取。

在命令行中尝试:

FOO=bar node -e "process.env.FOO"

进程模块只是一个全局可用的东西。

4
我认为选择应该是这样的。 1) 如果变量取决于环境,则必须在process.env中设置。 2) 如果变量只是整个应用程序都可以访问的常量,则必须设置为全局变量。
我认为,如果您不涉及这两个方面,您就没有必要将某个值存储在两个位置。

1
如果您启动node.js应用程序,可能需要使用一些不同的“环境”,例如API-URL和其他类似的东西,因为在生产/实时环境中,这些URL通常与您的本地开发环境不同。
这意味着您可以使用例如一个`.env`文件,在启动您的应用程序之前注入这些路径。
这是一个例子:
NODE_API_URL=https://myApi.com/myEndpoints myApp.js

global.thing = bla这一行代码将在环境变量被设置之后被读取。

应用程序运行后,可以通过应用程序访问环境变量和其他全局定义。


0

来自文档 NodeAPI

process 对象是一个全局对象,它提供有关当前 Node.js 进程信息和控制的功能。作为全局对象,无需使用 require() 即可在 Node.js 应用程序中始终可用。

您可以将您的环境变量附加到该对象上,以确保没有其他全局污染。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接