受疫情影响最近一直在家办公,遇到一个问题,同事原本须要将一些文件按照清单提供给我,可是看了一下发现缺乏不少,因此我须要对照清单将当前缺乏的文件名提供出来给他,让他把缺乏的补给我。
可是因为文件有不少因此没办法一一对比,因此想用node写个脚原本作这件事,说干就干。
ps:若是要看用node扫描文件夹(不一样目录层级)下全部文件请直接看第5步。node
一、先准备文件,将现有文件放在一个文件夹下,因为全部的文件分别在不一样的目录下,因此一下子读取的时候可能会有点麻烦。
二、而后将文件清单整理出来并存在LIST中。
三、咱们其实并不须要key,只须要使用后面的地址,因此Object.values()方法将后边的value值取出来存到数组中,执行如下看结果:json
let apiList = Object.values(ENV); console.log(apiList)
四、获取到的地址中,以https开头的咱们不须要,咱们把以http开头的文件读取出来存到数组中:api
let http = [] for(let item of apiList) { if(item.substr(0, 5) == "https") { https.push(item) }else{ http.push(item) } }
五、接下来进入最关键的地方,咱们须要将文件夹下全部文件读取出来,可是文件存放的路径层级各不相同,因此咱们须要用递归调用的方式去获取。数组
const fs = require('fs') const basePath = './src/assets/dummyAPIResponse' var join = require('path').join; let fileList = [] function getJsonFiles(jsonPath){ let jsonFiles = []; function findJsonFile(path){ let files = fs.readdirSync(path); files.forEach(function (item, index) { let fPath = join(path,item); let stat = fs.statSync(fPath); if(stat.isDirectory() === true) { findJsonFile(fPath); } if (stat.isFile() === true) { jsonFiles.push(item); } }); } findJsonFile(jsonPath); fileList = jsonFiles } getJsonFiles(basePath); console.log(fileList)
六、此时的咱们已经获得了全部的文件名字和名字清单,咱们须要先将两个用名字进行比较得出重复的名称列表(也就是如今存在的),而后再将已有的和全量名称列表去对比得出缺失的文件名。ui
let output = [] for(let item of fileList) { for(let httpItem of http) { if(httpItem.indexOf(item) !== -1) { output.push(httpItem) } } } function getArrDifference(arr1, arr2) { return arr1.concat(arr2).filter(function(v, i, arr) { return arr.indexOf(v) === arr.lastIndexOf(v); }); } let result = getArrDifference(output,http) console.log(result)
七、此时咱们的任务还差一点,咱们再建立个文件用node将数据写入进去便可。spa
fs.writeFileSync('./file/http.js', result, { encoding: "UTF-8" });
简单的功能其实用到了很多关于node和js的知识,如读取文件名称和路径,对比数组等。这篇就先写这么多,之后慢慢写。最后贴出本篇全部代码方便你们参考。3d
let apiList = Object.values(ENV); let http = [] for(let item of apiList) { if(item.substr(0, 5) != "https") { http.push(item) } } const fs = require('fs') const basePath = './src/assets/dummyAPIResponse' var join = require('path').join; let fileList = [] function getJsonFiles(jsonPath){ let jsonFiles = []; function findJsonFile(path){ let files = fs.readdirSync(path); files.forEach(function (item, index) { let fPath = join(path,item); let stat = fs.statSync(fPath); if(stat.isDirectory() === true) { findJsonFile(fPath); } if (stat.isFile() === true) { jsonFiles.push(item); } }); } findJsonFile(jsonPath); fileList = jsonFiles } getJsonFiles(basePath); let output = [] for(let item of fileList) { for(let httpItem of http) { if(httpItem.indexOf(item) !== -1) { output.push(httpItem) } } } function getArrDifference(arr1, arr2) { return arr1.concat(arr2).filter(function(v, i, arr) { return arr.indexOf(v) === arr.lastIndexOf(v); }); } let result = getArrDifference(output,http) console.log(result); fs.writeFileSync('./file/http.js', result, { encoding: "UTF-8" });