一、前端脚本经常需要用到遍历指定文件夹下面的所有文件(包含子文件夹)的内容并做特定的逻辑处理,下面给出同步遍历的方式,开箱即用。
// const fs = require('fs');
const require = createRequire(import.meta.url);
const fs = require('fs');
main()
function main() {
let allFiles = getAllFiles(srcDir);
console.log(`文件数量:${allFiles.length}`);
for (let i = 0; i < allFiles.length; i++) {
console.log(allFiles[i]);
// 同步读取文件内容
let content = fs.readFileSync(filePath).toString();
console.log(content);
}
}
/**
* 递归遍历,获取指定文件夹下面的所有文件路径
*/
function getAllFiles(filePath) {
let allFilePaths = [];
if (fs.existsSync(filePath)) {
const files = fs.readdirSync(filePath);
for (let i = 0; i < files.length; i++) {
let file = files[i]; // 文件名称(不包含文件路径)
let currentFilePath = filePath + '/' + file;
let stats = fs.lstatSync(currentFilePath);
if (stats.isDirectory()) {
allFilePaths = allFilePaths.concat(getAllFiles(currentFilePath));
} else {
allFilePaths.push(currentFilePath);
}
}
} else {
console.warn(`指定的目录${filePath}不存在!`);
}
return allFilePaths;
}
二、解析JavaScript方法体字符串的结束位置(写自动化脚本时很实用)
/**
* 获取JavaScript方法体字符串的结束位置(原理:利用"{}"成对出现)
* @param content 完整的方法字符串
* @param begin 方法的起始位置(content中第一个'{'之前的任意位置,前提是方法括号参数中不含'{'和'}'字符)
* @return {number} 方法结束符"}"在content字符串中的位置
*/
function getEndFlagLocation(content, begin) {
let end = -1;
if (!content || content.length < begin) return end;
let tempAfter = content.substring(begin);
let start1 = tempAfter.indexOf('{');
let split = tempAfter.split('');
let count = 0;
for (let i = start1; i < split.length; i++) {
if (split[i] === "{") {
count++;
} else if (split[i] === '}') {
count--;
if (count === 0) {
end = i + begin;
break;
}
}
}
return end;
}