JavaScript (Node.js) 应用配置
任何现代 Node.js 应用都需要灵活的设置管理:数据库参数、API 密钥、端口、日志级别。正确的配置不仅仅是读取文件,更是一种关于安全性、可测试性和可移植性的文化。在本文中,我们将介绍关键库和方法,帮助您在 JavaScript (Node.js) 项目中组织配置。
为什么需要专门的配置工具?
通过 process.env 或 JSON 文件进行手动管理很快就会导致混乱。主要问题包括:
- 将机密信息(密码)与代码混合——一旦进入仓库就会带来安全风险。
- 缺乏验证——变量名中的拼写错误可能导致难以发现的错误。
- 难以支持不同的环境(开发、预发布、生产)。
1. dotenv —— 环境变量的标准
最流行的库(每周下载量超过 2500 万次)。它将 .env 文件中的变量加载到 process.env 中。非常适合本地开发。
安装与基本配置
npm install dotenv在项目根目录创建 .env 文件:
PORT=3000DB_HOST=localhostDB_USER=adminDB_PASS=secret123在您的主文件(例如 app.js)的最开头引入:
require('dotenv').config();
const express = require('express');const app = express();
app.listen(process.env.PORT, () => { console.log(`服务器运行在端口 ${process.env.PORT}`);});重要: 切勿将 .env 提交到 Git!请将其添加到 .gitignore 中。相反,应创建一个包含模板的 .env.example 文件。
自定义路径与多个文件
// 从特定路径加载require('dotenv').config({ path: '/custom/path/.env' });
// 支持多个环境if (process.env.NODE_ENV === 'production') { require('dotenv').config({ path: '.env.production' });} else { require('dotenv').config({ path: '.env.development' });}2. config —— 分层配置
config 库(来自 node-config 的创建者)提供了一个强大的系统,包含默认设置、环境覆盖以及对多种格式(JSON、YAML、JS)的支持。
文件夹结构
config/ default.json # 基本设置 production.json # 生产环境覆盖 development.json # 本地环境覆盖 custom-environment-variables.json # 映射到 process.envdefault.json 示例:
{ "server": { "port": 3000, "host": "localhost" }, "db": { "host": "localhost", "port": 5432, "name": "myapp" }}在代码中使用:
const config = require('config');
const dbConfig = config.get('db');console.log(`正在连接到 ${dbConfig.host}:${dbConfig.port}/${dbConfig.name}`);特色: 根据 NODE_ENV 自动选择文件。如果 NODE_ENV=production,则会合并 default.json + production.json。
3. nconf —— 灵活的源层次结构
nconf 允许组合多个具有优先级的配置源:命令行参数 → 环境变量 → 文件 → 默认值。
const nconf = require('nconf');
// 定义层次结构(顶部优先级最高)nconf .argv() // 命令行参数 .env('__') // 环境变量(使用 __ 作为嵌套分隔符) .file({ file: 'config.json' }) // 配置文件