环境变量#

环境变量是与 Node.js 进程运行环境相关联的变量。

CLI 环境变量#

有一组环境变量可以定义来定制 Node.js 的行为,更多详细信息请参阅 CLI 环境变量文档

process.env#

与环境变量交互的基本 API 是 process.env,它由一个包含预填充用户环境变量的对象组成,可以对其进行修改和扩展。

更多详细信息请参阅 process.env 文档

DotEnv#

稳定性:2 - 稳定

用于处理定义在 .env 文件中的额外环境变量的一组实用工具。

.env 文件#

.env 文件(也称为 dotenv 文件)是定义环境变量的文件,Node.js 应用程序可以与这些变量进行交互(由 dotenv 包推广)。

以下是一个基本 .env 文件内容示例

MY_VAR_A = "my variable A"
MY_VAR_B = "my variable B"

这种类型的文件在各种不同的编程语言和平台中使用,但没有正式的规范,因此 Node.js 定义了下述自己的规范。

.env 文件是一个包含键值对的文件,每一对由变量名、等号 (=) 以及变量值组成。

这类文件的名称通常是 .env,或者以 .env 开头(例如 .env.dev,其中 dev 表示特定的目标环境)。这是推荐的命名方案,但并非强制,dotenv 文件可以使用任何任意文件名。

变量名#

有效的变量名必须仅包含字母(大写或小写)、数字和下划线 (_),且不能以数字开头。

更具体地说,有效的变量名必须符合以下正则表达式

^[a-zA-Z_]+[a-zA-Z0-9_]*$

推荐的约定是使用大写字母,并在必要时使用下划线和数字,但任何符合上述定义的变量名均可正常工作。

例如,以下是一些有效的变量名:MY_VARMY_VAR_1my_varmy_var_1myVarMy_Var123;而以下则是无效的:1_VAR'my-var'"my var"VAR_#1

变量值#

变量值由任意文本组成,可以选择使用单引号 (') 或双引号 (") 包裹。

带引号的变量可以跨越多行,而未加引号的变量仅限于单行。

注意,当被 Node.js 解析时,所有值都会被解释为文本,这意味着任何值在 Node.js 中都将作为 JavaScript 字符串。例如以下值:0true{ "hello": "world" } 将分别生成字面量字符串 '0''true''{ "hello": "world" }',而不是数字零、布尔值 true 或包含 hello 属性的对象。

有效变量示例

MY_SIMPLE_VAR = a simple single line variable
MY_EQUALS_VAR = "this variable contains an = sign!"
MY_HASH_VAR = 'this variable contains a # symbol!'
MY_MULTILINE_VAR = '
this is a multiline variable containing
two separate lines\nSorry, I meant three lines'
空格#

除非变量键和值被引号括起来,否则它们前后的空白字符都会被忽略。

例如:

   MY_VAR_A   =    my variable a
    MY_VAR_B   =    '   my variable b   '

将被视为与以下内容相同

MY_VAR_A = my variable a
MY_VAR_B = '   my variable b   '
注释#

井号 (#) 字符表示注释的开始,这意味着该行剩余部分将被完全忽略。

然而,引号内的井号会被视为普通字符处理。

例如:

# This is a comment
MY_VAR = my variable # This is also a comment
MY_VAR_A = "# this is NOT a comment"
export 前缀#

export 关键字可以可选地添加在变量声明之前,该关键字在处理文件时将被完全忽略。

这样做很有用,以便该文件可以在 Shell 终端中直接加载(source),而无需修改。

示例

export MY_VAR = my variable

CLI 选项#

.env 文件可以通过以下 CLI 选项之一用于填充 process.env 对象

编程 API#

以下两个函数允许您直接与 .env 文件交互

  • process.loadEnvFile 加载 .env 文件并使用其中的变量填充 process.env

  • util.parseEnv 解析 .env 文件的原始内容并将其值以对象形式返回