前缀为
问题描述:
的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文件?
答
gulp-merge-json
提供edit
选项,允许您在合并所有文件之前修改每个文件的解析JSON。
所以在你的情况下,你所要做的就是将解析后的每个文件的JSON粘贴到一个像{'componentBlogBox': parsedJson}
这样的新对象中并返回。属性是否应该componentBlogBox
或componentCaseSlider
您可以通过查看文件的路径确定:(信用为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'));
});
答
真棒斯文,正是我一直在寻找对于。 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'));
});