结合两个json文件给一组variables在Gulp中使用

我已经在网上看到很多关于如何使用require语句来使用文件中定义的一组variables的post。

我想知道如何使用两个文件。

例如,在伪…

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) 

这保持configurationDRY,也意味着我不必为每个环境创build一个新的文件。

我是Gulp的新手,但我认为这将是一个普遍的要求,但是Google没有提出任何与env特定设置合并的默认设置。

我需要写一个节点模块吗?

使用yargsparsing命令行参数,并extend到组合两个configuration对象:

 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); }); 

运行gulp --env=prod将打印组合configuration,而只需运行gulp将打印默认configuration。

你可以用ES6函数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在Node中受支持,所以您可以随时使用它。

编辑:如果你有更旧版本的节点,你可以使用像Sven Schoenungbuild议的extend

使用以下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); }