Confman - 分享一个「Node 应用」配置文件加载模块

一句话介绍

Confman 是一个强大的配置文件加载器,无论你喜欢 yaml 、cson、json、properties、plist、ini、toml、xml 还是 js,都能满足你的愿望,并且更加简单、更加强大。


支持的特性

  • 支持多种配置文件格式,默认包括 yaml/cson/json/properties/plist/ini/toml/xml/js
  • 支持配置文件相互引用,无论何种格式都可以「引用其它任意格式」的配置文件
  • 支持「基于目录」的多文件配置
  • 支持「环境配置」,区分加载生产、测试等不同的配置
  • 可以非常方便的「扩展」新的配置文件格式
  • 可以「混合使用」不同的配置文件格式
  • 内置多种「指令」,并可轻易的扩展新的指令

现在就安装

$ npm install confman --save

来几个示例

不同的环境配置

目录

app
├── index.js
├── config.dev.yaml
├── config.prod.yaml
└── config.yaml

index.js

const confman = require('confman');
const configs = confman.load(`${__dirname}/config`);
console.log(configs);

启动应用

$ NODE_ENV=prod node index.js

通过指定 NODE_ENV 可以加载指定的「环境配置文件 config.prod.yaml」,并和「默认配置 config.yaml」进行合并,
如果有相同的配置,「环境配置会覆盖默认配置」

配置文件相互引用

文件一: test1.yaml

name: test1
#可以使用 $require 引用其它文件
child: $requrie ./test2

文件二: test2.json

{
  "name": "test2",
   "child": "$require other-file"
}

$require 可以在任意支持的格式的配置文件中使用

基于目录的多文件配置

目录结构

├── config
│   ├── conn.yaml
│   ├── index.yaml
│   └── mvc.yaml
├── config.dev
│   └── conn.yaml
├── config.prod
│   └── conn.yaml
└── index.js

index.js

const confman = require('confman');
const configs = confman.load(`${__dirname}/config`);
console.log(configs);

添加新格式

其实,多数情况你不需要这么做,如果确实有需要,你可这样编写一个自定义 loader

module.exports = {
  extname: '.xxx',
  load: function (configPath) {
    //...
    return configs;
  }
};

注册自定义 loader

confman.loaders.push(require('your-loader-path'));

新的扩展名

方式一,映射到一个已经添加的 loader

confman.loaders.push({
  extname: '.xxx',
  loader: '.yaml'
});

方式二,直接映射到一个未添加的自定义 loader

confman.loaders.push({
  extname: '.xxx',
  loader: require('your-loader-path')
});

内置的指令

如上边用到的 $require,Confman 允许使用指令完成某些配置,内置的指令包括:

  • $require 引用指令,用于引用其它配置文件,参数为相对于当前文件的相对路径或绝对路径
  • $calc 计算指令,用于计算一个表达式,如 $calc root.baseUrl+"/xxx" (表达式中可用变量有 root:根对象,parent:父对象,self:当前对象)
  • $read 读取指令,用于读取一个文本文件,参数为相对于当前文件的相对路径或绝对路径

示例 example.yaml

name: example
test1: $require ./test1.json
test2: $read ./test2.txt
test3: $calc root.name + ":test3"

假如 test1.json 的内容为 { "name": "test1" }test2.txt 的内容为 my name is test2,
通过 Confman.load('./example') 加载 example 的结果为:

{
  "name": "example",
  "test1": { "name": "test1" },
  "test2": "my name is test2",
  "test3": "example:test3"
}

自定义指令

编写一个自定义指令的代码如下:

module.exports = {
  name: 'xxx',
  exec: function(context){
    //context.fromPath 来自哪个配置文件
    //context.parser 当前 Confman 实例
    //context.root 根对象
    //context.parent 父对象
    //context.self 当前对象
    //context.name 配置属性名
    //context.value 指令后的值
    return {} //返回值为指令执行结果
  }
};

注册自定义指令

confman.directives.push(require('your_directive_path'));

  • 新的建议或 Bug 请使用 isseus 反馈
时间: 2024-11-03 12:49:52

Confman - 分享一个「Node 应用」配置文件加载模块的相关文章

根据配置文件加载js依赖模块_javascript技巧

要求: 根据下面的配置文件 复制代码 代码如下: module=[ {'name':'jquery','src':'/js/lib/jquery-1.8.3.js'}, {'name':'swfobject','src':'/js/utils/swfobject.js'}, {'name':'fancybox','src':'/js/jquery/jquery.fancybox.js','require':['jquery']}, {'name':'uploadify','src':'/js/u

servlet-springMVC,Spring 配置文件 加载

问题描述 springMVC,Spring 配置文件 加载 web.xml配置文件配置如下,启动时时候加载配置文件先后顺序是怎样的, 1.先加载context-param,初始化springMVC加载spring-mvc.xml,这样的话spring-mvc.xml会不会被加载两次. 2.初始化springMVC加载spring-mvc.xml,再加载context-param的 有谁知道,帮忙给看下 3.spring-mvc.xml会不会加载两次,如果加载两次是怎么处理. 解决方案 Sprin

node.js使用require()函数加载模块_node.js

详细说明均以写在注释之中,这里就不啰嗦了,小伙伴们自己详细看吧,千万别吧注释当成空气了. 复制代码 代码如下: /*在node中,可以使用require()函数来加载模块.  * require函数使用一个参数,参数值可以带有完整路径的模块的文件名,也可以为模块名.当使用node中提供的模块时,在require函数中只需要指定模块名即可.  * */ //建立一个页面2.js;代码如下 var name="思思博士"; exports.name=name; //建立一个页面1.js;代

安卓frgment-Frgment切换到另一个Frgement 在返回 数据重写加载 怎么让他只加载一次!

问题描述 Frgment切换到另一个Frgement 在返回 数据重写加载 怎么让他只加载一次! Frgment切换到另一个Frgement 在返回 数据重写加载 怎么让他只加载一次! 解决方案 frgment 加载数据 解决方案二: 加上一个全局变量判断下

异步-require.js配置文件加载顺序?

问题描述 require.js配置文件加载顺序? require.jsdata-main=""../js/main""我想引入的是独立的配置文件,下面在写一行加载页面逻辑比如a.js但data的方式是异步加载,导致a比main先加载,有什么办法吗?我不用data的方式另起一行的话是可以 解决方案 require.js 配置文件研究 解决方案二: require(['a']function(){//先请求完a,再回调里面在请求湖区main,不用直接script加载,会

spring 配置文件-spring配置文件加载顺序的问题

问题描述 spring配置文件加载顺序的问题 刚接触spring,如图 扫面bean的代码写在applicationContext.xml里,然后倒入其他的xml,这里扫描了所有的controller service 和dao,测试请求提示404 然后换一下书写位置 测试通过,有没有大鸟能解释一下啊,不胜感激 解决方案 第二幅图不清楚,我再发下 解决方案二: 求大神解答啊,spring初学者 解决方案三: 你使用的是注解吗,你第一个配置的是注解方式管理的,第二个图我看不到

一个用XML配置的动态加载办法,比上一个全面,希望还能进精华区

xml|动态|加载|精华 首先设计一个简单的XML配置文件config.xml<?xml version='1.0' encoding='utf-8'?><test><luck title="Luck Bang Bang Bang" tag="LUCK" application="dispatch.test" method="mm"></luck></test>接下来

struts配置文件加载问题

问题描述 之前我写struts.xml能加载,现在这样写也能加载,不是默认加载struts.xml的吗,在哪可以设置 解决方案 解决方案二:实话说有什么关系呢struts可以其他名称,是为了:小组内可以进行模块化设计时,每个人都可写自己的struts_XX.xml,保持功能相对独立解决方案三:我问是在那地方配置的解决方案四:从不期望有这个功能,使用默认struts.xml就很够了.有其它配置文件就用import.解决方案五:在struts.xml中使用<includefile="strut

分布式系统hadoop配置文件加载顺序详细教程

在使用hadoop之前我们需要配置一些文件,hadoop-env.sh,core-site.xml,hdfs-site.xml,mapred-site.xml.那么这些文件在什么时候被hadoop使用? 一般的在启动hadoop的时候使用最多就是start-all.sh,那么这个脚本都干了些什么?  代码如下 复制代码 # Start all hadoop daemons. Run this on master node. #特别的地方时要在master节点上启动hadoop所有进程   bin