V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
houfeng
V2EX  ›  Node.js

Confman - 针对「Node 应用」的配置文件加载模块

  •  
  •   houfeng · 2016-07-26 23:37:47 +08:00 · 2120 次点击
    这是一个创建于 2830 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一句话介绍

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

    npm version Build Status

    支持的特性

    • 支持多种配置文件格式,默认包括 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.ymal 」,并和「默认配置 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'));
    

    自定义扩展名

    方式一,映射到一个已经支持(添加注册到 confman )的 loader

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

    方式二,映射到一个自定义 loader

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

    现在或将来有可能会用到?那你应该去加个 Star
    GitHub : https://github.com/Houfeng/confman

    1 条回复    2016-07-26 23:40:56 +08:00
    phoenixlzx
        1
    phoenixlzx  
       2016-07-26 23:40:56 +08:00
    star 已送
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1155 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:05 · PVG 07:05 · LAX 16:05 · JFK 19:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.