# 环境变量

URL: https://caijiao.org/koa/project/env
Source: docs/koa/project/env.md
Description: 环境变量用于存储敏感信息和配置，能够根据不同的环境（如开发、测试、生产）动态地加载配置，使得应用更灵活和安全。

环境变量是操作系统提供的一种机制，用于存储关于环境的动态信息，如数据库配置、API 密钥等。在 Koa 应用中，环境变量通常用于存储敏感信息和配置，使得应用在不同的环境（如开发、测试、生产）中能够灵活地加载不同的配置。

## 使用环境变量的好处

- **安全性**：敏感信息（如 API 密钥、数据库密码）不需要硬编码在代码中，避免了安全风险。
- **灵活性**：可以根据不同的环境加载不同的配置，避免在代码中频繁修改配置。
- **可移植性**：通过使用环境变量，应用可以更容易地迁移到不同的服务器或环境中。

## 使用 `.env` 文件

在 [Koa](/koa/) 应用中，环境变量可以通过 `.env` 文件进行管理。你可以使用 `dotenv` 库来加载 `.env` 文件中的环境变量。

### 1. 安装 `dotenv`

```bash
npm install dotenv
````

### 2. 创建 `.env` 文件

在项目的根目录下创建一个 `.env` 文件，用于存储环境变量。

```plaintext
# .env 文件示例

DB_HOST=localhost
DB_PORT=27017
DB_NAME=koa_app
API_KEY=your-api-key-here
```

### 3. 加载 `.env` 文件

在应用的入口文件（通常是 `app.js` 或 `server.js`）中，使用 `dotenv` 库加载 `.env` 文件中的环境变量。

```js
// app.js

require('dotenv').config();

const Koa = require('koa');
const app = new Koa();

// 使用环境变量
const dbHost = process.env.DB_HOST;
const dbPort = process.env.DB_PORT;
const dbName = process.env.DB_NAME;

console.log(`Connecting to database at ${dbHost}:${dbPort}/${dbName}`);

// 启动应用
app.listen(3000, () => {
  console.log('Koa server is running on port 3000');
});
```

### 4. 使用环境变量

你可以在应用的任何地方使用 `process.env` 来访问环境变量。例如：

```js
const apiKey = process.env.API_KEY;
```

## 环境变量的管理

### 不同环境的配置

对于不同的环境（如开发、测试、生产），你可以创建多个 `.env` 文件，并根据环境加载不同的配置。常见的做法是使用环境变量来指定当前使用的配置文件：

- `.env.development`：开发环境配置
- `.env.production`：生产环境配置
- `.env.test`：测试环境配置

### 加载不同的 `.env` 文件

你可以根据 `NODE_ENV` 环境变量来动态加载不同的 `.env` 文件：

```js
// app.js

const dotenv = require('dotenv');

const envFile = `.env.${process.env.NODE_ENV || 'development'}`;
dotenv.config({ path: envFile });

const Koa = require('koa');
const app = new Koa();

// 使用环境变量
const dbHost = process.env.DB_HOST;
const dbPort = process.env.DB_PORT;
const dbName = process.env.DB_NAME;

console.log(`Connecting to database at ${dbHost}:${dbPort}/${dbName}`);

app.listen(3000, () => {
  console.log('Koa server is running on port 3000');
});
```

### 使用环境变量的最佳实践

1. **避免在代码中硬编码敏感信息**：使用环境变量来存储敏感信息，如数据库密码、API 密钥等。
2. **为不同环境创建不同的配置**：使用 `.env` 文件为开发、测试和生产环境提供不同的配置，确保在不同的环境中使用合适的配置。
3. **不要将 `.env` 文件提交到版本控制系统**：为了安全性，通常将 `.env` 文件添加到 `.gitignore` 文件中，防止它被提交到 Git 仓库。
4. **使用环境变量文件和 `dotenv` 配合使用**：使用 `dotenv` 来加载 `.env` 文件中的配置，并通过 `process.env` 访问。

通过合理使用环境变量，Koa 应用可以灵活地在不同环境中运行，并保证敏感信息的安全性。
