node package manager



nodejsconfig is a Node.JS package that helps developers to write and maintain configurations for multiple environments. It has the following features:

  • No need to matian multiple configuration files;
  • Common configuration can be shared by multiple environments (*.username in the following example)
  • Using JSON to configure values;
  • Easy to use;


npm install nodejsconfig

Use Case

It is common that developers use different database credentials in development, QA and production environment. We assume that for these three environments, database user names and passwords are:

  • Dev: admin/password_dev
  • QA: admin/password_qa
  • Prod: admin-prod/password-prod

With nodejsconfig, the developer needs to author a configuration file (e.g. like below:

*.username = "admin";
prod.username= "admin-prod";
*.password = "password_dev";
qa.password = "password_qa";
prod.password = "password-prod";
# other configurations
*.port = 3306;
*.enabled = true;
*.price = 12.04;

The synax of the above file is very easy to understand. It reads:

by default, the username is 'admin';
if the environment is 'prod' then the username becomes 'admin-prod';
by default, the password is 'password_dev';
if the environment is 'qa' then the password is 'password_qa';
if the environment is 'prod' then the password is 'password-prod';

To read the configurations for a given environment:

var xnconfig = require('nodejsconfig');
var fs = require('fs');
var data = fs.readFileSync(__dirname+"/", "UTF8");
// assume we will be using environment "prod"
var config = xnconfig.parse("prod", data);
// the output will be admin-prod

Advanced Features

nodejsconfig supports definition of arrays and maps in the configuration file:

*.credentials = {
    username: "admin",
*.valid_users = ["admin", "foo", "bar"];

You can use "@" to refer other keys in the same configuration file:

*.username = "admin";
*.password = "password";
*.credentials = {
   # @username to refer the 'username' defined in the same env
   # please note it is not @*.username.
    username: @username, 
    password: @password

By default, you can use one '' as the prefix of your property names. If you want, you can tell nodejsconfiguration to use multiple ''s as the prefix. For example:

# set the number of prefixes to 2
*.*.username = "admin";
*.*.password= "password";

By doing that, in environemnt prod.special, the username will be admin_special; otherwise, it is "admin".


  1. Antlr
  2. Antlr Javascript
  3. Java version of nodejsconfig (XNConfig)