受疫情影響最近一直在家辦公,遇到一個問題,同事原本須要將一些文件按照清單提供給我,可是看了一下發現缺乏不少,因此我須要對照清單將當前缺乏的文件名提供出來給他,讓他把缺乏的補給我。
可是因爲文件有不少因此沒辦法一一對比,因此想用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" });