Dotenv 教程
最后修改于 2023 年 10 月 18 日
在本文中,我们将展示如何使用 dotenv 模块在 JavaScript 中加载环境变量。
dotenv 模块
dotenv 是一个零依赖模块,它将环境变量从 .env 文件加载到 process.env 中。 将配置存储在代码之外的环境中是基于十二因素应用方法论的。
环境变量
环境变量允许我们独立于我们的代码库来管理应用程序的配置。 分离配置使我们的应用程序更容易在不同的环境中部署。
环境变量是应用程序外部的变量,它们存在于生产应用程序运行的操作系统或容器中。 由于开发主要在本地机器上完成,因此环境变量要么使用 set 或 export 等命令放入本地环境变量中,要么存储在本地 .env 文件中。
按照惯例,变量用大写字母书写 (例如 PORT)。
存储在环境变量中的常见配置数据示例包括
- HTTP 端口
- 数据库连接字符串
- 静态文件的位置
- 外部服务的端点
.env 文件永远不应该提交到源代码存储库。 我们必须将该文件放入 .gitignore 文件中。(在使用 git 时。)
现代编辑器支持 .env 文件; 例如,code 有 DotENV 扩展。
.env 解析规则
以下是一些基本的解析引擎规则
- BASIC=basic 变成 {BASIC: 'basic'}
- 空行将被跳过
- 注释以 # 开头
- 空值变成空字符串; BASIC= 变成 {BASIC: ''}
- 内部引号被保留
现有的环境变量不会被修改; 它们被跳过。
Dotenv 设置
我们使用 npm 安装 dotenv 模块。
$ node -v v11.5.0
我们使用 Node 版本 11.5.0。
$ npm init -y
我们启动一个新的 Node 应用程序。
$ npm i dotenv
我们使用 npm i dotenv 命令安装 dotenv。
Dotenv 简单示例
在第一个示例中,从 .env 文件中读取配置数据。
HOST = localhost DATABASE = ydb PORT = 5432
我们有三个变量:HOST、DATABASE 和 PORT。 我们通过使用大写字母来遵守命名约定。
require('dotenv').config()
const hostname = process.env.HOST;
const database = process.env.DATABASE;
const port = process.env.PORT;
console.log(hostname);
console.log(database);
console.log(port);
在示例中,我们读取这三个变量并将它们打印到控制台。
require('dotenv').config()
我们加载 dotenv 库并调用 config 方法,该方法将变量加载到 process.env 中。
const hostname = process.env.HOST; const database = process.env.DATABASE; const port = process.env.PORT;
我们从 process.env 中读取这三个变量。
console.log(hostname); console.log(database); console.log(port);
最后,将变量打印到终端。
$ node simple.js localhost ydb 5432
Dotenv 预加载
我们可以使用 --require (-r) 命令行选项来预加载 dotenv。 通过这样做,我们不需要在应用程序中 require 和加载 dotenv。
HOST = localhost DATABASE = ydb PORT = 5432
我们有相同的变量。
const hostname = process.env.HOST; const database = process.env.DATABASE; const port = process.env.PORT; const user = process.env.USER; console.log(hostname); console.log(database); console.log(port); console.log(user);
在此示例中,我们不 require dotenv 模块。 此外,我们读取在操作系统环境中设置的变量。
$ set USER=user7 $ node -r dotenv/config preload.js localhost ydb 5432 user7
在 Windows 上,我们使用 set 定义环境变量。(在 Linux 上使用 export)。 这些变量被正确打印出来。
来源
在本文中,我们使用 dotenv 模块从 .env 文件中读取环境变量。