Concat Json 个带前缀的文件
Concat Json files with prefix
我想将我的 json 文件与 gulp 任务合并,每个 json 文件都有一个前缀。
我有几个这样的 json 文件
{
"en": {
"title": "Component title english",
"subtitle": "Component subtitle english",
},
"nl": {
"title": "Component title dutch",
"subtitle": "Component subtitle dutch",
}
}
我想将它们与组件名称作为前缀合并,这样合并的结果将是这样的:
"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 使用节点模块 gulp-merge-json 的任务,但这只是替换键以形成一个。
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'));
});
有没有一种方法可以使用 gulp 任务进行合并,而无需编辑我所有的 json 文件?
gulp-merge-json
提供了一个 edit
选项,允许您在合并所有文件之前为每个文件修改已解析的 JSON。
因此,在您的情况下,您所要做的就是将每个文件的已解析 JSON 粘贴到一个新对象中,例如 {'componentBlogBox': parsedJson}
和 return。 属性 应该是 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。)
很棒的 Sven,正是我想要的。驼峰式的东西并不是真正的必备品,但它对进一步开发来说是一个很好的接触。
我简化成这样
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'));
});
我想将我的 json 文件与 gulp 任务合并,每个 json 文件都有一个前缀。
我有几个这样的 json 文件
{
"en": {
"title": "Component title english",
"subtitle": "Component subtitle english",
},
"nl": {
"title": "Component title dutch",
"subtitle": "Component subtitle dutch",
}
}
我想将它们与组件名称作为前缀合并,这样合并的结果将是这样的:
"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 使用节点模块 gulp-merge-json 的任务,但这只是替换键以形成一个。
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'));
});
有没有一种方法可以使用 gulp 任务进行合并,而无需编辑我所有的 json 文件?
gulp-merge-json
提供了一个 edit
选项,允许您在合并所有文件之前为每个文件修改已解析的 JSON。
因此,在您的情况下,您所要做的就是将每个文件的已解析 JSON 粘贴到一个新对象中,例如 {'componentBlogBox': parsedJson}
和 return。 属性 应该是 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。)
很棒的 Sven,正是我想要的。驼峰式的东西并不是真正的必备品,但它对进一步开发来说是一个很好的接触。
我简化成这样
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'));
});