# `dotenv`教程

> 原文： [http://zetcode.com/javascript/dotenv/](http://zetcode.com/javascript/dotenv/)

`dotenv`教程展示了如何使用`dotenv`模块在 JavaScript 中加载环境变量。

## `dotenv`模块

`dotenv`是一个零依赖模块，可将环境变量从`.env`文件加载到`process.env`中。 将配置存储在与代码分开的环境中是基于十二因子应用方法的。

## 环境变量

环境变量使我们能够与代码库分开管理应用的配置。 分开的配置使我们的应用更容易在不同的环境中部署。

环境变量是应用外部的变量，它们驻留在运行生产应用的 OS 或容器中。 由于开发大部分是在本地计算机上完成的，因此环境变量可以通过`set`或`export`等命令放置到本地环境变量中，或者存储在本地`.env`文件中。

按照惯例，这些变量都写在大写字母（例如端口）。

存储在环境变量中的配置数据的常见示例包括：

*   HTTP 端口
*   数据库连接字符串
*   静态文件的位置
*   外部服务的端点

绝对不要将`.env`文件提交到源代码存储库。 我们必须将文件放入`.gitignore`文件。 （使用 git 时。）

现代编辑器支持`.env`文件。 例如，`code`具有 DotENV 扩展名。

## `dotenv`解析规则

以下是一些基本的解析引擎规则：

*   `BASIC=basic`变为`{BASIC: 'basic'}`
*   空行被跳过
*   注释以`#`开头
*   空值变成空字符串； `BASIC=`变为`{BASIC: ''}`
*   内部引用保持不变

现有的环境变量不会被修改； 他们被跳过。

## Dotenv 设置

我们将`dotenv`模块与`npm`一起安装。

```js
$ node -v
v11.5.0

```

我们使用 Node 版本 11.5.0。

```js
$ npm init -y

```

我们启动一个新的 Node 应用。

```js
$ npm i dotenv

```

我们使用`npm i dotenv`命令安装`dotenv`。

## `dotenv`简单示例

在第一个示例中，从`.env`文件中读取配置数据。

`.env`

```js
HOST = localhost
DATABASE = ydb
PORT = 5432

```

我们有三个变量：`HOST`，`DATABASE`和`PORT`。 我们使用大写字母来遵守命名约定。

`simple.js`

```js
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);

```

在示例中，我们读取了三个变量并将它们打印到控制台。

```js
require('dotenv').config()

```

我们加载`dotenv`库，并调用`config()`的方法，它加载变量进入`process.env`。

```js
const hostname = process.env.HOST;
const database = process.env.DATABASE;
const port = process.env.PORT;

```

我们从`process.env`中读取了三个变量。

```js
console.log(hostname);
console.log(database);
console.log(port);

```

最后，变量被打印到终端。

```js
$ node simple.js
localhost
ydb
5432

```

这是输出。

## `dotenv`预加载

我们可以使用`--require`（`-r`）命令行选项来预加载`dotenv`。 这样，我们不需要在应用中要求和加载`dotenv`。

`.env`

```js
HOST = localhost
DATABASE = ydb
PORT = 5432

```

我们有相同的变量。

`preload.js`

```js
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);

```

在此示例中，我们不需要`dotenv`模块。 另外，我们读取在 OS 环境中设置的变量。

```js
$ set USER=user7
$ node -r dotenv/config preload.js
localhost
ydb
5432
user7

```

在 Windows 上，我们使用`set`定义环境变量。 （在 Linux 上使用`export`）。 变量打印确定。

在本教程中，我们使用了`dotenv`模块从`.env`文件读取环境变量。

您可能也对以下相关教程感兴趣： [Moment.js 教程](/javascript/momentjs/)，[从 JavaScript 中的 URL 读取 JSON](/articles/javascriptjsonurl/) ， [Node Sass 教程](/javascript/nodesass/)， [Lodash 教程](/javascript/lodash/) 或列出[所有 JavaScript 教程](/all/#js)。