JavaScript (Node.js) 应用程序配置:最佳库与实践
任何严肃的 Node.js 应用程序都需要灵活且安全的配置系统。数据库密码、API 密钥、服务器端口、日志级别——所有这些参数都必须与代码分离,能够在不同环境(开发、测试、生产)中轻松更改,并且最重要的是,不能进入版本控制系统。
在本文中,我们将介绍 Node.js 中三种最流行的配置管理库:dotenv、convict 和 nconf。您将学习如何正确配置应用程序、避免常见错误以及根据任务选择合适的工具。
1. dotenv——简单与安全
dotenv 是最流行的从 .env 文件加载环境变量的库。其主要优势在于极简主义。您只需创建一个 .env 文件,将参数放入其中,库就会将它们加载到 process.env 中。
安装与基本使用
npm install dotenv在项目根目录创建 .env 文件:
PORT=3000DB_HOST=localhostDB_USER=adminDB_PASS=supersecretNODE_ENV=development在应用程序的最开始(通常在 app.js 或 index.js 中)添加:
require('dotenv').config();
const express = require('express');const app = express();
const port = process.env.PORT || 3000;
app.listen(port, () => { console.log(`服务器已在端口 ${port} 上启动`);});使用 dotenv 的重要规则
- 切勿提交
.env文件到 Git。请将其添加到.gitignore中。 - 创建一个
.env.example文件,包含所有变量的模板(不含实际值)。这有助于新开发人员快速上手。 - 对于生产环境,请使用服务器上设置的实际环境变量。
dotenv仅用于开发。 - 不要在
.env中存储复杂数据结构——仅存储字符串和数字。
2. convict——验证与模式
如果 dotenv 解决了“如何加载”的问题,那么 convict 则回答了“如何检查和结构化”的问题。该库允许您定义包含数据类型、默认值和验证规则的配置模式。
安装与模式示例
npm install convictconst convict = require('convict');
const config = convict({ env: { doc: '应用程序环境', format: ['production', 'development', 'test'], default: 'development', env: 'NODE_ENV' }, server: { port: { doc: 'HTTP 服务器端口', format: 'port', default: 3000, env: 'PORT' } }, db: { host: { doc: '数据库主机', format: String, default: 'localhost', env: 'DB_HOST' }, password: { doc: '数据库密码', format: String, default: '', env: 'DB_PASS', sensitive: true // 不在日志中输出 } }});
// 加载值config.validate({ allowed: 'strict' });
module.exports = config;convict 的优势
- 自动验证——如果
.env中是字符串而不是数字,启动时您将收到错误。 - 文档化——
doc字段作为内置文档。 - 安全性——标记为
sensitive: true的字段不会在日志中输出。 - 支持嵌套结构——便于处理复杂配置。
3. nconf——层级来源
nconf
图书馆中也有
推荐