Node-config如何指定运行环境并加载对应环境配置文件
node-config 多环境配置落地实现方案
第一步:调整配置文件目录与命名规范
node-config 有默认的配置加载规则,你之前创建的dev.config.json/qa.config.json命名不符合规范,需要按以下规则调整:
- 在项目根目录新建
config文件夹,所有配置文件都放在这个目录下 - 新增
default.json:存放所有环境通用的公共配置,不需要每个环境重复写 - 分环境配置文件直接以环境名命名:
dev.json、qa.json、stage.json、prod.json,只存放对应环境和公共配置有差异的配置项 - 可选新增
local.json:存放本地开发的个人自定义配置,把这个文件加入.gitignore,不会提交到代码仓库,避免影响其他人的开发配置
配置加载时会自动做合并覆盖:对应环境的配置会覆盖default.json里的同名字段,不需要你自己写合并逻辑。
第二步:指定当前运行环境
node-config 优先读取NODE_CONFIG_ENV环境变量判断当前运行环境,只有当这个变量不存在时,才会 fallback 读取NODE_ENV的值,比你之前直接用NODE_ENV区分环境的方式更清晰,不会和其他依赖包对NODE_ENV的默认行为冲突。
本地开发启动脚本配置
为了兼容Windows/macOS/Linux跨平台设置环境变量,先安装跨平台环境变量工具:
npm i cross-env -D
然后修改package.json里的启动脚本:
"scripts": { "start-dev": "cross-env NODE_CONFIG_ENV=dev node ./bin/www", "start-qa": "cross-env NODE_CONFIG_ENV=qa node ./bin/www", "start-stage": "cross-env NODE_CONFIG_ENV=stage node ./bin/www", "start-prod": "cross-env NODE_CONFIG_ENV=prod node ./bin/www" }
部署环境指定方式
如果是部署在AWS EC2/ECS/EKS等环境,不需要修改启动命令,直接在服务的环境变量配置里添加NODE_CONFIG_ENV=对应环境名即可,node-config会自动读取。
第三步:代码中读取配置
在业务代码里直接引入node-config包,就可以读取当前环境合并后的完整配置,不需要自己判断环境写加载逻辑:
// 引入config包,建议在业务代码最前面引入 const config = require('config'); // 读取指定配置项,比如读取服务端口、数据库地址等 const serverPort = config.get('server.port'); const dbHost = config.get('database.host'); // 如果需要获取当前运行环境值,可以调用工具方法 const currentEnv = config.util.getEnv('NODE_CONFIG_ENV');
兼容旧代码与敏感配置处理
- 如果你之前的老代码里大量用
process.env.NODE_ENV做环境判断,不需要全量修改,只需要在项目入口文件(比如./bin/www)的最顶部加一行代码即可兼容:
const config = require('config'); process.env.NODE_ENV = config.util.getEnv('NODE_CONFIG_ENV');
- 不建议把数据库密码、API密钥这类敏感信息硬编码到配置文件提交到代码库,这类配置可以继续从AWS Parameter Store读取,在应用启动时把读取到的敏感值覆盖到config实例上即可;也可以用node-config的环境变量占位符能力,在配置文件里写
"dbPassword": "${DB_PASSWORD}",启动时注入DB_PASSWORD环境变量,node-config会自动替换占位符。
内容的提问来源于stack exchange,提问作者Sandeep Parashar
相关产品推荐
相关产品推荐

