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