目录
痛点
解决方案
部署环境不同
开发环境不同
安全地配置
实操
rc 模块
具体操作
首页 web前端 js教程 nodejs配置文件处理的方法介绍

nodejs配置文件处理的方法介绍

Jan 02, 2019 am 09:51 AM
node.js

本篇文章给大家带来的内容是关于nodejs配置文件处理的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一般来说:一个好的项目配置应该满足以下条件:

  1. 依赖环境:配置根据具体运行环境从相应的文件读取

  2. 代码分离:配置项不仅可以从配置文件读取, 也可以从环境变量读取,使得安全隐秘的配置项与代码分离

  3. 易于使用:配置项应该是分层配置的,有助于查找条目和维护庞大的配置文件的,应该是容易组织和容易获取的,比如json结构

在多人开发 nodejs 项目的时候,没有规划好配置方案,配置文件的问题就很容易暴露出来。

痛点

在开发 nodejs 的工程中,遇到过三个痛点

  1. 部署环境不同: 开发、测试、生产环境的不同,导致配置的不同

  2. 开发环境不同: 开发者的开发环境配置不同,会存在同一个配置文件配置项不同,同一文件不同内容提交,容易引起 git 冲突,影响 git 提交更新

  3. 安全地配置: 一些配置不应该明文保存在项目代码里面,比如数据库密码

解决方案

部署环境不同

对于部署环境不同,相对容易解决,建立相应环境的配置文件,比如:

  1. 开发环境配置:developmentConfig.js

  2. 测试环境配置:testConfig.js

  3. 生产环境配置:productionConfig.js

再建一个config.js配置文件作为入口获取配置,如下:

module.exports = require(`./${process.env.NODE_ENV}Config.js`)
登录后复制

引用配置的时候,只要引用 config.js 即可。
运行命令如下:

NODE_ENV=development node index.js

开发环境不同

对于开发环境不同,导致每个人的developmentConfig.js不同,这个不能要求别人的配置和你的一样,这样项目就太硬了。
我们可以把developmentConfig.js添加到.gitignore,从而从项目分离出来,再在readme.md说明如何配置developmentConfig.js
最好是建立一个developmentConfig.example.js,并在文档说明复制成developmentConfig.js后修改配置项符合自己的开发配置。

安全地配置

对于项目一些安全性要求高的配置项,我们应该从配置文件脱离出来,只能在当前的运行进程可以获取, 配置文件的配置项再读取进程的配置项值,比如数据库密码, 一般做法如下:
productionConfig.js

module.exports = {
    database: {
        user: process.env.user || 'root',
        password: process.env.password || 'yfwzx2019'
    }
}
登录后复制

而更隐秘的办法是,你根本不知道我用环境变量覆盖了配置项值,比如:

productionConfig.js

module.exports = {
    database: {
        user: 'root',
        password: 'yfwzx2019'
    }
}
登录后复制

一般人拿到了这个配置,就会以为数据库的账号密码就是rootyfwzx2019,其实最后会被环境变量的值覆盖,运行如下:

node index.js --database_user=combine --database_password=tencent2019

当然,是要做了一些处理才可以这样配置。

实操

方案有了,我们先来介绍以下 nodejs 的配置模块 rc模块

rc 模块

使用rc模块需要定义一个appname,选择rc模块是因为它会尽可能多的从appname命名相关的地方读取配置。
使用也很简单,先实例一个 rc 配置:

var conf = require('rc')(appname, defaultConfigObject)

然后它会从下面列表合并配置,优先级按顺序合并:

  1. 命令行参数:--user=root 或者对象形式赋值 --database.user=root

  2. 环境变量: 环境变量前缀为${appname}_的变量 appname_user=root 对象形式 appname_database__user=root

  3. 指定文件: node index.js --config file

  4. 默认配置文件: 从 ./ ../ ../../ ../../../等目录查找.${appname}rc文件

  5. $HOME/.${appname}rc

  6. $HOME/.${appname}/config

  7. $HOME/.config/${appname}

  8. $HOME/.config/${appname}/config

  9. /etc/${appname}rc

  10. /etc/${appname}/config

做了个 demo, 直观一点

var conf = require('rc')('development', {
  port: 3000,
})
console.log(JSON.stringify(conf))

// 1、直接运行
// node index.js
// { port: 3000, _: [] }

// 2、加上命令行参数
// node index.js --port=4000 --database.user=root
// { port: 4000, _: [], database: { user: 'root' } }

// 3、加上环境变量
// development_port=5000 development_database__password=yfwzx2019 node index.js 
// {"port":"5000","database":{"password":"yfwzx2019"},"_":[]}

// 4、指定配置文件:根目录建一个配置文件 config.json, 内容如下
// {
//   "port": "6000"
// }
// node index.js --config=config.json
// {"port":"6000","_":[],"config":"config.json","configs":["config.json"]}

// 5、默认读取 ${appname}rc 文件:根目录见一个配置文件 .developmentrc 内容如下:
// {
//   "port": 7000  
// }
// node index.js
// {"port":7000,"_":[],"configs":[".developmentrc"],"config":".developmentrc"}

// 6、 5 和4 一起运行
// node index.js --config=config.json
// {"port":"6000","_":[],"config":"config.json","configs":[".developmentrc","config.json"]}
登录后复制

具体操作

看了 rc 模块,可以满足我们的需求,我们可以配置公共的配置项,也可以隐秘的覆盖我们的配置项。

  1. 创建配置文件目录,添加配置文件

├── config
│   ├── .developmentrc.example
│   ├── .productionrc
│   ├── .testrc
│   └── index.js
登录后复制

其中 .developmentrc.example 是开发环境的例子,然后开发人员参考建 .developmentrc 文件, index.js 是配置入口文件,内容如下:

let rc = require('rc')

// 因为 rc 是从 process.cwd() 向上查找 .appnamerc 文件的,我们在根目录 config 文件夹里面的是找不到的,要改变工作路径到当前,再改回去
var originCwd = process.cwd()
process.chdir(__dirname)
var conf = rc(process.env.NODE_ENV || 'production', {
  // 默认的共同配置
  origin: 'default',
  baseUrl: 'http://google.com/api',
  enableProxy: true,
  port: 3000,
  database: {
    user: 'root',
    password: 'yfwzx2019'
  }
})

process.chdir(originCwd)

module.exports = conf
登录后复制
  1. 关于部署环境的不同,获取配置通过设置环境变量NODE_ENV来适配

  2. 关于开发环境的不同,在.gitignore添加config/.developmentrc,项目代码去掉开发环境配置.developmentrc,开发人员根据.developmentrc.example建直接的开发配置.developmentrc

  3. 关于安全地配置,通过添加环境变量覆盖默认值,可以安全隐秘地覆盖配置项,比如:

NODE_ENV=production node index.js --database.password=tencent2019


以上是nodejs配置文件处理的方法介绍的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
图文详解Node V8引擎的内存和GC 图文详解Node V8引擎的内存和GC Mar 29, 2023 pm 06:02 PM

本篇文章带大家深入了解NodeJS V8引擎的内存和垃圾回收器(GC),希望对大家有所帮助!

一文聊聊Node中的内存控制 一文聊聊Node中的内存控制 Apr 26, 2023 pm 05:37 PM

基于无阻塞、事件驱动建立的Node服务,具有内存消耗低的优点,非常适合处理海量的网络请求。在海量请求的前提下,就需要考虑“内存控制”的相关问题了。 1. V8的垃圾回收机制与内存限制 Js由垃圾回收机

聊聊如何选择一个最好的Node.js Docker镜像? 聊聊如何选择一个最好的Node.js Docker镜像? Dec 13, 2022 pm 08:00 PM

选择一个Node​的Docker镜像看起来像是一件小事,但是镜像的大小和潜在漏洞可能会对你的CI/CD流程和安全造成重大的影响。那我们如何选择一个最好Node.js Docker镜像呢?

Node.js 19正式发布,聊聊它的 6 大特性! Node.js 19正式发布,聊聊它的 6 大特性! Nov 16, 2022 pm 08:34 PM

Node 19已正式发布,下面本篇文章就来带大家详解了解一下Node.js 19的 6 大特性,希望对大家有所帮助!

一起聊聊Node中的事件循环 一起聊聊Node中的事件循环 Apr 11, 2023 pm 07:08 PM

事件循环是 Node.js 的基本组成部分,通过确保主线程不被阻塞来实现异步编程,了解事件循环对构建高效应用程序至关重要。下面本篇文章就来带大家深入了解Node中的事件循环 ,希望对大家有所帮助!

深入聊聊Node中的File模块 深入聊聊Node中的File模块 Apr 24, 2023 pm 05:49 PM

文件模块是对底层文件操作的封装,例如文件读写/打开关闭/删除添加等等 文件模块最大的特点就是所有的方法都提供的**同步**和**异步**两个版本,具有 sync 后缀的方法都是同步方法,没有的都是异

聊聊用pkg将Node.js项目打包为可执行文件的方法 聊聊用pkg将Node.js项目打包为可执行文件的方法 Dec 02, 2022 pm 09:06 PM

​如何用pkg打包nodejs可执行文件?下面本篇文章给大家介绍一下使用pkg将Node项目打包为可执行文件的方法,希望对大家有所帮助!

node无法用npm命令怎么办 node无法用npm命令怎么办 Feb 08, 2023 am 10:09 AM

node无法用npm命令是因为没有正确配置环境变量,其解决办法是:1、打开“系统属性”;2、找到“环境变量”->“系统变量”,然后编辑环境变量;3、找到nodejs所在的文件夹;4、点击“确定”即可。

See all articles