Node.js 中的环境变量

2025年2月21日 | 阅读 4 分钟

理解和管理环境变量在当今软件开发中非常重要,尤其是在处理在线应用程序时。这些变量存储着应用程序在各种环境(包括开发、测试和生产)中正常运行所需的优化或敏感数据。Node.js 是开发服务器端应用程序最受欢迎的运行时环境之一,它提供了强大的环境变量处理功能。在本文中,我们将讨论 Node.js 中的环境变量,包括它们的使用、访问和示例。

什么是环境变量?

环境变量 是动态值,可以改变软件应用程序的行为。它们通常特定于应用程序运行的环境,并安装在应用程序的直接后端。各种类型的数据,例如数据库连接字符串、API 密钥、系统标志 等,都可以存储在这些变量中。

为什么要使用环境变量?

  1. 配置控制
    使用环境变量,我们可以根据 Node.js 应用程序是在开发、测试还是生产环境中运行来对其进行不同的配置。这可以确保在不同的部署场景下进行一致的操作,而无需更改代码库。
  2. 安全性
    我们可以将私有数据存储在应用程序代码之外的环境变量中,包括加密密钥、数据库凭据和 API 密钥。通过隔离这些信息,我们减少了未经授权的人员暴露机密信息或无意中将其纳入版本控制系统的可能性。
  3. 可移植性
    环境变量通过将结构与软件分离来提高 Node.js 应用程序的可移植性。由于配置信息是通过环境变量从外部提供的,因此可以在多个环境中重复使用相同的应用程序代码,而无需进行内部修改。
  4. 可扩展性
    在规模化运行 Node.js 应用程序时,使用环境变量可以轻松地跨多个实例或服务器管理配置参数。通过提供一个系统,使我们能够在不更改代码的情况下自定义每个实例或环境的设置,从而简化了扩展和维护。
  5. 灵活性
    可以在不重新部署应用程序的情况下更改应用程序行为。环境更改允许动态适应,这在微调系统或解决生产问题时非常有用。

如何访问环境变量?

process.env 对象可以轻松访问环境变量。在 Node.js 中,环境变量的键值对包含在一个全局对象中,值存储为字符串。

process.env

所有环境变量都作为键值对在全局对象process.env中处理,值存储为字符串。Node.js 应用程序最初会读取由操作系统或父进程设置的环境变量,并将其存储在 process.env 对象中。这使得在应用程序代码主体中实现和访问这些变量更加容易。

  1. 理解 process.env:
    • 在 Node.js 中,process.env 对象提供了对当前进程环境的访问。
    • 它是所有 Node.js 应用程序中用于功能的全局对象。
    • 环境变量名称及其对应的值是 process.env 对象中找到的键值对的键和值。
  2. 访问环境变量
    • 要访问环境变量,请使用其名称作为 process.env 对象上的键。
    • 例如,使用 process.env.PORT 访问 PORT 环境变量。
  3. 验证环境变量是否已定义
    • 在访问环境变量之前检查它是否已定义是一个好习惯,以防止错误。
    • 如果未指定变量,我们可以使用条件语句或空值合并 (??) 运算符来提供默认值。

4. 设置环境变量

  • 根据 Node.js 应用程序运行的环境,有几种方法可以配置环境变量。
  • 在启动 Node.js 应用程序之前,可以在 shell 中、使用 dotenv 等包创建的 .env 文件中,或者直接在部署环境中(例如服务器配置)指定。

5. 使用 'dotenv' 进行本地部署

  • 在本地开发过程中,通常通过 .env 文件处理环境变量。
  • 使用 npm 安装 dotenv 包
  • 项目应在根目录下有一个 .env 文件,我们可以在其中使用 KEY=VALUE 格式定义我们的环境变量。
  • 为了使用 dotenv 使更改生效,请将 .env 文件粘贴到我们应用程序入口点的开头

示例

让我们举一个例子来说明 Node.js 中的环境变量。

输出

Environment variable in Node.js

为环境变量设置默认值

OR 函数允许我们设置环境变量的默认值,如本例所示:process.env.MY_VARIABLE || 'default_value set'。 默认值会导致不可预测的行为,并可能使调试变得困难,因此在使用它们时要小心。

通常建议在运行应用程序之前检查环境是否配置正确,尤其是当应用程序基于特定配置时。

在没有默认设置的情况下管理环境变量要求

我们可以使用 assert.ok() 或类似方法来确保必需的环境变量已正确设置,并带有默认值,使程序能够继续运行。如果未提供环境,则管理其缺失的条件有助于避免错误并确保我们的应用程序正常工作。