wimnat
wimnat

Reputation: 1148

Combine two json files to give a set of variables to use in Gulp

I have seen lots of posts online about how to use a set of variables defined in a file using a require statement.

I want to know how I can use two files.

For example, in pseudo...

gulp --env=prod

if (env):
  defaultConfig = require('./config/default.json')
  envConfig = require('./config/prod.json')
  config = combine(defaultConfig, envConfig)
else:
  config = require('./config/default.json')

// Now i can access everything like so...
console.log(config.name)
console.log(config.minify)

This keeps by config DRY and also means I don't have to create a new file for every environment I have.

I'm new to Gulp but i thought this would be a common requirement however, Google hasn't turned up anything for having defaults merged with env specific settings.

Do i need to write a node module?

Upvotes: 1

Views: 1122

Answers (3)

franmartosr
franmartosr

Reputation: 388

You can do it with ES6 function Object.assign:

gulp --env=prod

if (env):
  defaultConfig = JSON.parse(require('./config/default.json'))
  envConfig = JSON.parse(require('./config/prod.json'))
  config = Object.assign(defaultConfig, envConfig)
else:
  config = JSON.parse(require('./config/default.json'))

// Now i can access everything like so...
console.log(config.name)
console.log(config.minify)

ES6 is supported in Node so you can use it whenever you want.

EDIT: If you have older versions of Node, you can use extend like Sven Schoenung suggest.

Upvotes: 3

binariedMe
binariedMe

Reputation: 4329

Use the following function :

 function combine(a,b){
    var temp0 = JSON.stringify(a);
    var temp1 = temp0.substring(0, temp0.length-1);
    var temp2 = (JSON.stringify(b)).substring(1);
    var temp3 = temp1 + "," + temp2;
    return JSON.parse(temp3);
}

Upvotes: 0

Sven Schoenung
Sven Schoenung

Reputation: 30564

Use yargs to parse command line arguments and extend to combine the two config objects:

var gulp = require('gulp');
var argv = require('yargs').argv;
var extend = require('extend');

var config = extend(
  require('./config/default.json'),
  (argv.env) ? require('./config/' + argv.env + '.json') : {}
);

gulp.task('default', function() {
  console.log(config);
});

Running gulp --env=prod will print the combined config, while simply running gulp will print the default config.

Upvotes: 2

Related Questions