Files
svn/tech/tools/mergeConf.js
2025-08-04 10:46:00 +08:00

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();