用Grunt连接JSON文件的合适方法
Appropriate way to concat JSON files with Grunt
我正在寻找最好的方法来组合json文件,使用Grunt保持一定的结构。
文件按照如下结构被放置在文件夹中:
<>之前应用程序├──地区│├──en││├──translate .json│├──├││├──translate .json││││├──translate .json└──小部件├──的帖子│├──├─├│├──en││├──translate .json│├──├││├──translate .json││││├──translate .json├──评论│├──├─├│├──en││├──translate .json│├──├││├──translate .json││││├──translate .json└──链接├──地区│├──en││├──translate .json│├──├││├──translate .json││││├──translate .json之前合并后的期望输出是:
<>之前应用程序│├──朗│├──en││├──translate .json│├──├││├──translate .json││││├──translate .json├──地区└──小部件之前到目前为止,我想出了一个使用grunt-contrib-concat的解决方案,但我认为应该有更好的方法来做到这一点。
concat: {
translateEN: {
src: [
'www/js/app/locales/en/*.json',
'www/js/app/widgets/posts/locales/en/*.json',
'www/js/app/widgets/comments/locales/en/*.json',
'www/js/app/widgets/links/locales/en/*.json'
],
dest: 'www/js/app/lang/en/translation.json',
options: {
banner: '{',
footer: "}",
separator: ','
}
},
translateES: {
src: [
'www/js/app/locales/es/*.json',
'www/js/app/widgets/posts/locales/es/*.json',
'www/js/app/widgets/comments/locales/es/*.json',
'www/js/app/widgets/links/locales/es/*.json'
],
dest: 'www/js/app/lang/es/translation.json',
options: {
banner: '{',
footer: "}",
separator: ','
}
},
translateFR: {
src: [
'www/js/app/locales/fr/*.json',
'www/js/app/widgets/posts/locales/fr/*.json',
'www/js/app/widgets/comments/locales/fr/*.json',
'www/js/app/widgets/links/locales/fr/*.json'
],
dest: 'www/js/app/lang/fr/translation.json',
options: {
banner: '{',
footer: "}",
separator: ','
}
}
}
最后我自己写了一个grunt task:
grunt.task.registerMultiTask('buildLocales', 'Build Locale files.', function() {
var that = this,
len = this.filesSrc.length,
outputDir,
outputFile,
originalFile,
destFile,
merged;
var jsonConcat = function(object1, object2) {
var key, a1, a2;
for (key in object2) {
if (object2.hasOwnProperty(key)) {
a2 = object2[key];
a1 = object1[key];
if (a1) {
a1.push.apply(a1, a2);
} else {
object1[key] = a2;
}
}
}
return object1;
};
var iterateTroughFiles = function(abspath, rootdir, subdir, filename){
if (abspath.indexOf('/.svn') === -1){
outputDir = that.data.dest + '/' + subdir;
outputFile = outputDir + '/' + filename;
// If output dir doesnt exists, then create it
if (!grunt.file.exists(outputDir)) {
grunt.file.mkdir(outputDir);
}
originalFile = grunt.file.readJSON(abspath);
// if dest file doenst exist, then just copy it.
if (!grunt.file.exists(outputFile)) {
grunt.file.write(outputFile, JSON.stringify(originalFile));
} else {
// read source file, read dest file. merge them. write it in dest file
destFile = grunt.file.readJSON(outputFile);
merged = jsonConcat(destFile, originalFile);
grunt.file.write(outputFile, JSON.stringify(merged));
}
}
};
for (var x = 0; x < len; x++) {
grunt.file.recurse(this.filesSrc[x], iterateTroughFiles);
}
});
实现是这样的:
buildLocales: {
locales:{
src: [
'www/js/app/**/locales'
],
dest: PATH_BUILD_LANGUAGES
}
},
相关文章:
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 如何使用post方法从方法上传文件
- AJAX不会在文件上传后重定向到网页-POST方法
- Get方法获取csv文件的内容
- GWT:有没有一种方法可以修改GWT在编译中使用的Cast.java文件
- NodeJS-从同一文件中的另一个方法调用一个方法
- 节点如何将文件传递到http.write方法
- 任何编写文本文件并将其替换为上一个文本文件的方法
- ESDoc将我所有的模块方法放在一个标题下,而不是放在每个文件下,我该如何改变这种行为
- 在d3.json中使用d3.csv组合多个csv文件数据输入的最佳方法是什么
- 从HTML中的另一个文件访问javascript方法
- 有没有什么方法可以通过输入字段(type=file)来找出选择了多少个文件
- 如何在Liferay serveResource(-,-)方法中从AJAX请求下载文件
- 我无法在操作方法中将我的文件传递给 httppostedfilebase
- 在 Windows 现代(地铁)UI 应用中存储图像文件和音频文件的方法是什么?
- 文件未到达处理程序的方法
- 什么's是处理多个js文件之间交互的简单方法,同时避免溢出全局变量
- Jquery.清洁方法文件化
- JS美元.获取带有路径的方法文件