xconfig

X flexible Configurations for Nodejs

Usage no npm install needed!

<script type="module">
  import xconfig from 'https://cdn.skypack.dev/xconfig';
</script>

README

xconfig NPM version Build Status Dependency Status

X flexible configuration for node.js

Why ?

I wanted a config module which is really flexibile, that

  • Zero config: we could could use it even with no need to configure the config
  • Flexible: Supporting multiple config file formats is not flexible. We need to provide a way to support any formats as we wish.
  • Clean: Do things clean. No saving config data to this. Seperated configurations between projects, and you also could use one.
  • Load and Save: Safely loading and saving with lock.

Install

$ npm install xconfig --save

Usage

var config = require('xconfig')();
config.get('db.username');

Your Custom Config Location

var config = require('xconfig')({
  file: '~/.myproject/config.ini'
});

Custom File Codec

; config.ini
; some comments
[user.name]
family=Swift
var ini = require('ini');
var config = require('xconfig')({
  codec: {
    parse: ini.parse,
    stringify: ini.stringify
  },
  file: './config.ini'
});
console.log(config.get('user.name.family')); // Swift

The code above is equivalent to:

var config = require('xconfig')({
  codec: 'ini',
  file: './config.ini'
});
console.log(config.get('user.name.family')); // Swift

for 'ini' is a built codec.

And xconfig will try to guess the codec by extension name, so, you can just:

var config = require('xconfig')({
  file: './config.ini'
});
console.log(config.get('user.name.family')); // Swift

Set and Save Configurations

config.set('user.name.first', 'Taylor');
config.save();

config.ini

[user.name]
first=Taylor
family=Swift

Async Xconfig

require('xconfig').async({
  file: './config.ini'
}, function(err){
  if (err){
    console.error(err);
    return;
  }

  this.get('user.name.family'); // 'Swift';
  this.set('user.name.first', 'Taylor');
  this.save(function(err){
    if (err){
      console.error('error saving', err);
    }
  });
});

Programmatical API

xconfig(options)

Option Type Default Value Description
file path '~/.xconfig/config.json'
codec String|Object 'json' Format of config file, available value 'ini' and 'json'. Or an object contains both two methods of parse(string) and stringify(object)

License

May be freely distributed under the MIT license.

Copyright (c) Kael Zhang and other contributors.