2016-10-25 65 views
0
的Concat Json文件

我想將我的json文件與每個jsonfile前綴的gulp任務合併。前綴爲

我有這樣

{ 
    "en": { 
    "title": "Component title english", 
    "subtitle": "Component subtitle english", 
    }, 
    "nl": { 
    "title": "Component title dutch", 
    "subtitle": "Component subtitle dutch", 
    } 
} 

幾個JSON文件,我想與組件名稱作爲前綴合並這些因此合併的結果會來這樣的事:

"componentBlogBox": { 
    "en": { 
    "title": "Component title english", 
    "subtitle": "Component subtitle english", 
    }, 
    "nl": { 
    "title": "Component title dutch", 
    "subtitle": "Component subtitle dutch", 
    } 
} 
}, 
"componentCaseSlider": { 
    "en": { 
    "title": "Caseslider title english", 
    "subtitle": "caseslider subtitle english", 
    }, 
    "nl": { 
    "title": "Component title dutch", 
    "subtitle": "Component subtitle dutch", 
    } 
} 

我有這個使用節點模塊gulp-merge-json的gulp任務,但這只是將密鑰替換成一個密鑰。

gulp.task('json-merge', function(){ 
    gulp.src(['dest/json/blog-box/home.json', 'dest/json/case-slider/home.json']) 
    .pipe(jsonMerge('combined.json')) 
    .pipe(gulp.dest('dest/json')); 
}); 

有沒有辦法使用gulptask進行合併,而無需編輯我所有的json文件?

回答

1

gulp-merge-json提供edit選項,允許您在合併所有文件之前修改每個文件的解析JSON。

所以在你的情況下,你所要做的就是將解析後的每個文件的JSON粘貼到一個像{'componentBlogBox': parsedJson}這樣的新對象中並返回。屬性是否應該componentBlogBoxcomponentCaseSlider您可以通過查看文件的路徑確定:(信用爲camelCase功能去this answer

var jsonMerge = require('gulp-merge-json'); 
var path = require('path'); 

function camelCase(str) { 
    return str.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); }); 
} 

gulp.task('json-merge', function(){ 
    return gulp.src([ 
     'dest/json/blog-box/home.json', 
     'dest/json/case-slider/home.json' 
    ]) 
    .pipe(jsonMerge({ 
     fileName: 'combined.json', 
     edit: function(parsedJson, file) { 
     var component = path.basename(path.dirname(file.path)); 
     var editedJson = {}; 
     editedJson[camelCase('component-' + component)] = parsedJson; 
     return editedJson; 
     } 
    })) 
    .pipe(gulp.dest('dest/json')); 
}); 

0

真棒斯文,正是我一直在尋找對於。 camelcase的東西並不是一個必須的東西,但是對於進一步的開發來說它是一個很好的接觸。

我簡化成這個

gulp.task('json-merge', function(){ 
    return gulp.src([ 
     'dest/json/blog-box/home.json', 
     'dest/json/case-slider/home.json' 
    ]) 
    .pipe(jsonMerge({ 
     fileName: 'combined.json', 
     edit: function(parsedJson, file) { 
     var component = path.basename(path.dirname(file.path)); 
     var editedJson = {}; 
     editedJson[component] = parsedJson; 
     return editedJson; 
     } 
    })) 
    .pipe(gulp.dest('dest/json')); 
});