JavaScript (Node.js) 应用程序配置:dotenv、convict、nconf 库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

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 convict


const 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

推荐