运用node.js 和 DOS命令来编写打包 json 工具
首先运用nodejs 将需要打包的 json合并成一个json文件,之后,采用了两张打包方式,一种是用JSZIP打包,另一种采用打包工具7z进行打包,发现7z的打包压缩率略高于jszip的压缩率,下面请看代码
1.编写js代码,起名merger.js,代码中已标注了详细的注释
1 let fs = require("fs") 2 let path = require("path") 3 let JSZIP = require("jszip");//首先引用jszip库 npm install jszip 4 5 let jsonPath = path.join(__dirname, "/../client");//json目录地址 其中__dirname为该js所在的目录 6 let cfgPath = path.join(__dirname, "/../config");//存放配置文件的目录 7 8 let targetName = "cfg.json";//保存的合并后的json文件名 9 let zipName = "cfg.cfg";//打包生成的zip文件 10 11 let dataJson = {};//用于存放读取到的json总和 12 13 //读取json文件操作 14 function readJson(dirPath) { 15 let files = fs.readdirSync(dirPath);//同步读取目录文件 16 files.forEach((fileName, index) => {//遍历文件 17 try { 18 let filePath = path.join(dirPath, fileName);//获取文件的完整路径 19 let info = fs.statSync(filePath);//获取文件属性 20 if (info.isDirectory()) {//如果是文件夹就继续遍历文件目录 21 readJson(filePath); 22 } else {//非文件夹,则只读取json文件 23 var extname = path.extname(fileName);//获取文件扩展名 (扩展名前有 . ) 24 if (extname == ".json") { 25 console.log("当前文件:", fileName, index); 26 var data = fs.readFileSync(filePath, "utf-8");//同步读取文件内容,该文件数据中会包括换行(\n)、制表符(\t)等符号 27 dataJson[fileName.split(".")[0]] = JSON.stringify(JSON.parse(data));//所以保存数据前先转成JSON对象(去除多余的符号,减小体积),再转成数据进行保存 28 } 29 } 30 } catch (e) { 31 console.log(e); 32 } 33 }); 34 } 35 36 //写入文件 37 function writeMergeJson() { 38 console.log("开始写入。。。。。。。。。。"); 39 try { 40 fs.writeFileSync(path.join(cfgPath, targetName), JSON.stringify(dataJson), "utf-8"); 41 } catch (e) { 42 console.log(e); 43 } 44 } 45 46 //运用jszip进行打包json文件 47 function compressJSON() { 48 console.log("开始打包。。。") 49 try { 50 let zip = new JSZIP(); 51 zip.file(zipName, JSON.stringify(dataJson)); 52 zip.generateAsync({//设置压缩格式 53 type: "nodebuffer",//nodejs用 54 compression: "DEFLATE",//压缩算法 55 compressionOptions: {//压缩级别 1-9 数字越大压缩率越低,压缩越慢 56 level: 9 57 } 58 }).then((content) => { 59 fs.writeFileSync(path.join(cfgPath, zipName), content, "utf-8");//将内容写入文件 60 }) 61 } catch (e) { 62 console.log(e); 63 } 64 } 65 66 //开始读取文件,进行操作 67 readJson(jsonPath); 68 writeMergeJson(); 69 compressJSON();
2.编写简单的dos命令
1 @echo off 2 echo del client 3 4 set path1=..\config 5 del %path1%\cfg.json 6 del %path1%\cfg.cfg 7 8 9 echo start nodejs 10 node mergeTool.js 11 12 13 cd ../ 14 set filePath=%cd% 15 16 echo %filePath% 17 "7z\7za.exe" a -tzip config\cfg2.cfg config\cfg.json 18 19 20 pause
3. 看下打包后的数据大小
4. 最后总结一下:
node.js的运行,目前我只会用dos命令去执行,不知道其他方法是怎么直接运行js文件的,哪儿位博友知道可以给我留言告知我一声,感谢大家!
最近为了想编写一些小工具,才接触了node.js,和dos命令,大家在编写项目中的工具时都用什么编写的,可以互相交流下。在运用DOS命令执行本地文件时发现其中的编写很是简洁方便,但是不知道的东西太多了,每一个命令怎么用、该用哪儿个命令都无从下手,只能去搜索,也许只有在这种探索中才能够将自己变的强大,学无止境,努力加油!