Вы должны использовать функции fs.promises
для рекурсивного перечисления содержимого вашего каталога для получения единого списка файлов.
Модульное тестирование этой функции отдельно от любого кода, который фактически читает файл. (Например: ваш код filename.match
и readFile
должен быть проверен отдельно от кода traverseDir
.)
Пример асинхронного обхода каталогов для получения единого списка файлов:
Этот асинхронный allFilesIn
Функция рекурсивно получает все файлы в каталоге и возвращает список в виде одного массива с полными (относительными) путями.
const fs = require('fs').promises;
const path = require('path');
const allFilesIn = async (dir, results = []) => {
const files = await fs.readdir(dir);
for (file of files) {
const fullPath = path.join(dir, file);
const stat = await fs.stat(fullPath);
if (stat.isDirectory()) {
await allFilesIn(fullPath, results);
} else {
results.push(fullPath);
}
}
return results;
}
// Example call:
allFilesIn('src/').then(files => {
console.log(files); // e.g.: [ 'src\\foo.cpp', 'src\\bar.cpp', 'src\\include\\foo.h' ]
});
После того, как у вас будет один массив из всех файлов, должно быть легко используйте один forEach
, чтобы сделать что-то для всех файлов в объединенном списке.