module.exports 与环境变量

问题描述

在credentials.js 文件和.env 文件中存储敏感凭据有什么区别?

使用 module.exports,您可以编写:

const KEY = require("./credentials.js");

而使用 .env 文件,您可以编写:

const KEY = process.env.KEY;

在这两种情况下,您都实现了使某些变量成为“全局”变量并在全局范围内访问它的相同目标。为什么人们使用 .env 和 dotenv 而不是只使用 Node 的内置 module.exports 系统?

解决方法

环境变量旨在在机器(系统)上定义。 环境变量可用于在同一系统上运行的多个应用程序。

导出的变量仅限于您正在运行的应用程序。

就您而言:如果您想在 3 个服务器(Dev、QA、Prod)上部署您的应用程序,但使用不同的凭据,则每次更改凭据是没有意义的部署。即使您为每个服务器定义凭据,它也必须是静态的,如果您想更改它,您必须更改文件并再次部署应用程序以反映更改。如果是环境变量,您只需要在目标系统上更改它并重新启动服务器,因此无需再次部署应用程序。

当多个环境变量发生变化时,管理会变得一团糟。此外,在与其他服务集成时,环境变量也很有用。

对于环境变量的安全性,您可以阅读this

存储凭据时:

  • 存储在配置文件中时存在将凭据暴露给版本控制系统的风险
  • 如果系统遭到入侵,凭证的存储位置无关紧要
  • 您可以使用运行时配置文件。找到它here