Использование - a696385/a.config GitHub Wiki

Установка

Система конфигурации для Node.js приложений

Предисловие

Система конфигурация нацелена на систематизирование файлов конфигураций, позволяет удобно расширять изменять и управлять вашими настройками.

Использование

Установка через npm

project$ npm install a.config

Вы можете использовать для конфигуратора js, json, yaml.

Пример файла конфигурации

# Внутренние переменные
$config:

  default.format.processor: 'default'
  default.format.value: '%level %date %args %code'

  production:
    mongo:
      uri: 'mongodb://localhost.loc:27017/log'
      ttl: 604800
      format:
        name: 'mongo'
        value: '%level, %module, %hostname, %args, %code, %trace, %errors'

  development:
    $extend: production # Наследование production и изменение mongo.uri, mongo.ttl
    mongo:
      uri: 'mongodb://localhost:27017/log'
      ttl: 600

  prog12:
    $extend: development # Наследование development и изменение mongo.uri
    mongo:
      uri: 'mongodb://localhost:27030/log'

# Настройки системы логирования
default:
  all:
    console: true
    syslog: true

production:
  $extend: default # Наследование default и расширение свойством app
  app:
    all,info,debug:
      - mongo:
         $extend: :$config.production.mongo # Наследование $config.production.mongo
      - console: true
    error,warn:
      - mongo:
         $extend: :$config.production.mongo # Наследование $config.production.mongo
        syslog: true
      - console: true
development:
  $extend: default # Наследование default и расширение свойством app
  app:
    $replace: :production.app # Наследование из production.app, с полной заменой при наличии одинаковый свойств
    all,info,debug:
      - console: true  

Загрузка файла конфиграции

var config = require('a.config');
config.load(__dirname + '/config.yaml');

После загрузки конфигурации, ее можно использовать в любом месте приложении

var config = require('a.config');
console.log(config.default.all);

//{console: true, syslog: true}

Для создания нового объекта конфигурации можно использовать метод newInstance()

var config = require('a.config');
config.load(__dirname + '/config.yaml');

var exConfig = config.newInstance();
exConfig.load(__dirname + '/config.ex.yaml');

console.log(config.default.all);
//{console: true, syslog: true}

console.log(exConfig.default);
//undefined

Расширения

Для удобного использования конфигураций используется ряд раширений:

  • $extend - Позволяет расширять данный объект, необходимо указать имя объекта, который необходимо расширить. Имеет две возможности указания имени, абсолютный :production(перед именем ставится :), необходимо указать полный пусть к объекту, относительный production, указывается имя объекта находящегося в том же уровне.

    Пример

production:
  mongo:
    uri: 'mongodb://localhost.loc:27017/log'
    ttl: 604800
    format:
      name: 'mongo'
      value: '%level, %module, %hostname, %args, %code, %trace, %errors'

development:
  $extend: production
  mongo:
    uri: 'mongodb://localhost:27017/log'
    ttl: 600

user:
  mongo:
    $extend: :production.mongo
{
    "production": {
        "mongo": {
            "uri": "mongodb://localhost.loc:27017/log",
            "ttl": 604800,
            "format": {
                "name": "mongo",
                "value": "%level, %module, %hostname, %args, %code, %trace, %errors"
            }
        }
    },
    "development": {
        "mongo": {
            "uri": "mongodb://localhost:27017/log",
            "ttl": 600,
            "format": {
                "name": "mongo",
                "value": "%level, %module, %hostname, %args, %code, %trace, %errors"
            }
        }
    },
    "user": {
        "mongo": {
            "uri": "mongodb://localhost.loc:27017/log",
            "ttl": 604800,
            "format": {
                "name": "mongo",
                "value": "%level, %module, %hostname, %args, %code, %trace, %errors"
            }
        }
    }
}
  • $replace - Работает аналогично $extend за одним исключением, если одно из переопределенных свойств является объектом, то оно перекрывается полностью

    Пример

production:
  mongo:
    uri: 'mongodb://localhost.loc:27017/log'
    ttl: 604800
    format:
      name: 'mongo'
      value: '%level, %module, %hostname, %args, %code, %trace, %errors'

user:
  mongo:
    $replace: :production.mongo
    format:
      caption: 'caption'
{
    "production": {
        "mongo": {
            "uri": "mongodb://localhost.loc:27017/log",
            "ttl": 604800,
            "format": {
                "name": "mongo",
                "value": "%level, %module, %hostname, %args, %code, %trace, %errors"
            }
        }
    },
    "user": {
        "mongo": {
            "format": {
                "caption": "caption"
            },
            "uri": "mongodb://localhost.loc:27017/log",
            "ttl": 604800
        }
    }
}
  • $include - Расширяет объект свойствами из подключаемого файла, пути используются относительные текущего файла

    Пример

production:
  mongo:
    uri: 'mongodb://localhost.loc:27017/log'
    ttl: 604800
    format:
      name: 'mongo'
      value: '%level, %module, %hostname, %args, %code, %trace, %errors'

user:
  mongo:
    $include: './configs/mongo.yaml'

Лицензия

Может свободно распространяется под лицензией MIT

Смотрите файл лицензии LICENSE

Copyright (c) 2013 - Sumskoy Andrew [email protected]