confman v0.2.12
一句话介绍
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.yamlindex.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.jsindex.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 反馈
- 贡献代码,请使用 Pull Request,需一并提交相关测试并且不能低于现有覆盖率
4 years ago
4 years ago
8 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago