文章目录
一、前言
在 Node.js 项目中,环境变量的管理直接影响项目的安全性和可维护性。本文将深入对比两个流行的环境变量管理工具 dotenv
和 config
,从安装配置到最佳实践,助你选择最合适的方案。
二、dotenv
模块详解
1. 核心功能
- 作用:从
.env
文件加载环境变量到process.env
- 定位:轻量级环境变量注入工具
2. 使用步骤
安装:
npm install dotenv
基础用法:
// app.js
require('dotenv').config()
console.log(process.env.DB_HOST)
.env 文件示例:
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
3. 进阶功能
// 自定义路径和环境
require('dotenv').config({
path: '/custom/path/.env.production',
override: true // 覆盖已存在的环境变量
})
4. 优缺点
优点 | 缺点 |
---|---|
零配置快速接入 | 仅支持键值对存储 |
支持多环境文件 | 无分层配置能力 |
与容器化方案天然契合 | 缺乏类型校验 |
5. 适用场景
- 小型项目快速配置
- Docker/Kubernetes 环境
- 需要与环境变量深度集成的场景
三、config
模块详解
1. 核心功能
- 作用:实现多环境分层配置管理
- 定位:企业级配置管理解决方案
2. 使用步骤
安装:
npm install config
目录结构:
config/
├── default.json
├── development.json
├── production.json
└── custom-environment-variables.json
default.json:
{
"db": {
"host": "localhost",
"port": 27017
}
}
custom-environment-variables.json:
{
"db": {
"password": "DB_PASSWORD"
}
}
应用中使用:
const config = require('config')
console.log(config.get('db.host')) // 层级访问
3. 进阶功能
// 动态合并配置
const config = require('config')
const customConfig = {
db: {
timeout: 30 } }
config.util.extendDeep(config, customConfig)
4. 优缺点
优点 | 缺点 |
---|---|
支持 JSON/YAML/JS 等多种格式 | 依赖固定目录结构 |
内置环境隔离机制 | 学习成本较高 |
支持配置继承与覆盖 | 容器化支持较弱 |