vigour-config

1.0.5 • Public • Published

js-standard-style npm version

vigour-config

vigour-config allows you to easily make highly configurable services that are easy to test and launch in a variety of ways. Let's make an example service to understand how it works:

Requirements: Design your service as a class receiving a config object in the constructor

lib/index.js

'use strict'
var Config = require('vigour-config')
module.exports = exports = Service
 
function Service (config) {
  var myIP = ip.address()
  // If the object received is not a `vigour-config` observable
  if (!(config instanceof Config)) {
    // Make the config object a `vigour-config` observable
    config = new Config(config)
  }
  this.config = config // an observable
  console.log('someProperty', this.config.someProperty.val) // Get property values with `.val`
  var plainConfig = this.config.plain() // Turn observable into a regular object with `.plain()`
  console.log('someProperty', plainConfig.someProperty) // Now you don't need the `.val`
}
Service.prototype.start = function () { /* ... */ }

see observable

Making a binary executable for your service

bin/executable.js

#!/usr/bin/env node
'use strict'
 
var Service = require('../')
var service = new Service()
service.start()

Provide default configuration values, command-line argument descriptions and environment variable names

You can configure the configurations options for your service in its package.json package.json

{
  "vigour": {
    "someProperty": {
      "val": "default value",
      "description": "Printing during the Service instance creation",
      "_env": "MY_SERVICE_SOME_PROPERTY"
    },
    "deeper": {
      "property": {
        "val": "default",
        "description": "Currently not used",
        "_env": "MY_SERVICE_DEEP_PROPERTY"
      }
    }
  }
}

Configure and launch your service

Using the binary executable

Using only default values

./bin/executable.js

Environment variables

export MY_SERVICE_SOME_PROPERTY='Configured via env var'
export MY_SERVICE_DEEP_PROPERTY='ENV'
./bin/executable.js

Command line arguments

./bin/executable.js --someProperty 'Configured via CLI arg' --deeper.property 'CLI ARG'
JSON
./bin/executable.js --deeper '{"property":"CLI ARG"}'

Config file(s)

./bin/executable.js --mergeFiles config.json

config.json

{
  "someProperty": "Configured via a config file"
}

Multiple config files

./bin/executable.js --mergeFiles '["config.json","moreConfig.js"]'

Requiring your module

Using only default values

var Service = require('./lib/')
var service = new Service()
service.start()

Passing in configuration

var Service = require('./lib/')
var config = {
  someProperty: 'via params',
  deeper: {
    property: 'via params!'
  }
}
var service = new Service(config)
service.start()

Package Sidebar

Install

npm i vigour-config

Weekly Downloads

31

Version

1.0.5

License

MIT

Last publish

Collaborators

  • vigour-io