103 lines
2.5 KiB
JavaScript
103 lines
2.5 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
let mergeConf = {
|
|
sourcePath: process.argv[2],
|
|
destPath: process.argv[3],
|
|
|
|
start() {
|
|
// 非绝对路径则前缀加上当前目录
|
|
if (!path.isAbsolute(this.sourcePath)) {
|
|
this.sourcePath = path.join(__dirname, this.sourcePath);
|
|
}
|
|
if (!path.isAbsolute(this.destPath)) {
|
|
this.destPath = path.join(__dirname, this.destPath);
|
|
}
|
|
|
|
let jsonData = {};
|
|
jsonData.allInOneStr = '{';
|
|
this.traversalDir(this.sourcePath, jsonData);
|
|
let outStr = jsonData.allInOneStr.substring(0, jsonData.allInOneStr.lastIndexOf(','));
|
|
outStr += '}'
|
|
//outStr = outStr.replace(/\\/g,"");//去掉\字符
|
|
|
|
fs.writeFile(this.destPath, outStr, (err) => {
|
|
if (err) {
|
|
console.error(err);
|
|
return;
|
|
}
|
|
console.log('Success to write file: ' +this.destPath);
|
|
});
|
|
},
|
|
|
|
//遍历文件夹找到
|
|
traversalDir(srcDir, content) {
|
|
if (!srcDir || !fs.existsSync(srcDir)) {
|
|
console.error("invalid srcDir=" + srcDir);
|
|
return;
|
|
}
|
|
|
|
let files = fs.readdirSync(srcDir); //返回文件和子目录的数组
|
|
for (let i = 0; i < files.length; i++) {
|
|
let file = files[i];
|
|
let curPath = path.join(srcDir, file);
|
|
|
|
if (fs.statSync(curPath).isDirectory()) { //同步读取文件夹文件,如果是文件夹,则函数回调
|
|
this.traversalDir(curPath,name,callBack);
|
|
continue;
|
|
}
|
|
|
|
let extrName = path.extname(curPath);
|
|
let baseName = path.basename(curPath, '.json');
|
|
let names = baseName.substring('Conf'.length);
|
|
|
|
if (extrName === '.json') {
|
|
let fileStr = fs.readFileSync(curPath);
|
|
if (fileStr && fileStr.length > 0) {
|
|
let obj = JSON.parse(fileStr);
|
|
if (obj) {
|
|
if (this.isArray(obj)) {
|
|
obj = this.simpleArray(obj);
|
|
}
|
|
fileStr = JSON.stringify(obj); // 把汇总文件以精简格式输出
|
|
if (fileStr && fileStr.length > 0) {
|
|
let childStr = '"' + names + '"' + ":" + fileStr + ',';
|
|
content.allInOneStr += childStr;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return files;
|
|
},
|
|
|
|
// 精简数组格式
|
|
simpleArray(inArr) {
|
|
let outArr = [];
|
|
|
|
for (let i = 0; i < inArr.length; i++) {
|
|
let item = inArr[i];
|
|
if (i === 0) {
|
|
outArr.push(Object.keys(item));
|
|
}
|
|
outArr.push(Object.values(item));
|
|
}
|
|
|
|
return outArr;
|
|
},
|
|
|
|
// 是否为数组
|
|
isArray(obj) {
|
|
if (typeof Array.isArray === 'function') {
|
|
return Array.isArray(obj);
|
|
} else {
|
|
return Object.prototype.toString.call(obj) === '[object Array]';
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = mergeConf;
|
|
|
|
mergeConf.start();
|