2016-10-25 6 views
0

私のjsonファイルをjsonfileごとに接頭辞付きのgulpタスクとマージしたいと思います。接頭辞付きConcat 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", 
    } 
} 

私はマージの結果はこのような何かを来ることになるので、私は接頭辞としてコンポーネント名でこれらを統合したいと思い、この

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

のようないくつかのJSONファイルを持っています

ノードモジュール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は、すべてのファイルがマージされる前に、各ファイルの解析されたJSONを変更できるようにするオプションを提供します(edit)。

あなたがしなければならないことは、ファイルごとに解析されたJSONを{'componentBlogBox': parsedJson}のような新しいオブジェクトに貼り付けて返すだけです。プロパティはcomponentBlogBoxあるべきかcomponentCaseSliderあなたは、ファイルのパスを調べることで判断することができるかどうか:

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

camelCase機能のためのクレジットがthis answerに行く。)

0

恐ろしいスヴェン、私が探していただけで何ために。キャメルケースは本当に必要不可欠なものではありませんでしたが、それはさらなる開発のための素敵な触れ合いです。

私はこの

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')); 
}); 
にそれを簡素化
関連する問題