const fs = require('fs'); const path = require('path'); let CheckAudio = { srcFilePath: process.argv[2], destKeyPath: process.argv[3], start() { if (!path.isAbsolute(this.srcFilePath)) { this.srcFilePath = path.join(__dirname, this.srcFilePath); } if (!path.isAbsolute(this.destKeyPath)) { this.destKeyPath = path.join(__dirname, this.destKeyPath); } let fileStr = fs.readFileSync(this.destKeyPath); if (fileStr) { let obj = JSON.parse(fileStr); if (obj) { this.checkKeyIsExist(this.srcFilePath, obj); this.checkFileIsExist(this.srcFilePath, obj); } } }, /** * 检查文件对应的key是否存在,即文件是否多余。 * @param {*} srcFileDir * @param {*} fileKeyObj * @returns */ checkKeyIsExist(srcFileDir, fileKeyObj) { if (!srcFileDir || !fileKeyObj) { console.error("Checker: invalid srcFileDir=" + srcFileDir); return; } let _lookupDir = (srcDir) => { let files = fs.readdirSync(srcDir); for (let i = 0, len = files.length; i < len; i++) { let file = files[i]; let curPath = path.join(srcDir, file); let stat = fs.statSync(curPath); if (stat.isDirectory()) { _lookupDir(curPath); continue; } let bFound = false; let pathObj = path.parse(curPath); for (let key in fileKeyObj) { let fileName = fileKeyObj[key]; if (fileName && pathObj.name === fileName) { bFound = true; break; } } if (!bFound) { console.error('\u672a\u4f7f\u7528\u7684\u6587\u4ef6\u003a\u0020' + file); } } } _lookupDir(srcFileDir); }, /** * 获取目录下所有文件名 * @param {*} srcFileDir * @returns */ getAllFileName(srcFileDir) { if (!srcFileDir) { console.error("getAllFile: invalid srcFileDir=" + srcFileDir); return null; } let retFiles = []; let _lookupDir = (srcDir) => { let files = fs.readdirSync(srcDir); for (let i = 0, len = files.length; i < len; i++) { let file = files[i]; let curPath = path.join(srcDir, file); let stat = fs.statSync(curPath); if (stat.isDirectory()) { _lookupDir(curPath); continue; } let pathObj = path.parse(curPath); if (pathObj && pathObj.name) { retFiles.push(pathObj.name); } } } _lookupDir(srcFileDir); return retFiles; }, /** * 检查文件是否存在,即key使用了,但实际文件缺失 * @param {*} srcFileDir * @param {*} fileKeyObj * @returns */ checkFileIsExist(srcFileDir, fileKeyObj) { if (!srcFileDir || !fileKeyObj) { console.error("Checker: invalid srcFileDir=" + srcFileDir); return; } let allNames = this.getAllFileName(srcFileDir); for (let key in fileKeyObj) { let fileName = fileKeyObj[key]; if (fileName) { let bFound = false; for (let i = 0, len = allNames.length; i < len; i++) { if (fileName == allNames[i]) { bFound = true; break; } } if (!bFound) { console.error('\u7f3a\u5931\u7684\u6587\u4ef6\u003a\u0020' + fileName); } } } }, }; module.exports = CheckAudio; CheckAudio.start();