Одной из проблем является то, что file
в вашем коде это просто имя файла. Чтобы выполнить рекурсивный анализ, вы должны рекомбинировать имя файла с путем, чтобы вызвать generateComponents в каталоге, отличном от исходного пути. Это включает в себя, когда вы звоните fs.existsSync()
и fs.lstatSync()
:
const path = require('path');
function generateComponents(dir) {
fs.readdirSync(dir).forEach((file) => {
let fullPath = path.join(dir, file);
if (fs.lstatSync(fullPath).isDirectory()) {
console.log(`directory: ${fullPath}`)
generateComponents(fullPath);
} else {
console.log(`filename: ${fullPath}`)
//Do some code
}
});
}
FYI, вы также должны использовать опцию withFileTypes
для fs.readdirSync()
, так как это сэкономит вам fs.lstatSync()
вызов и fs.existsSync()
звонить совершенно не нужно. fs.readdirSync()
только что сказал, что файл был там, вам не нужно проверять, есть ли он снова.
Эта упрощенная версия с использованием withFileTypes
будет выглядеть так:
const path = require('path');
function generateComponents(dir) {
fs.readdirSync(dir, {withFileTypes: true}).forEach((entry) => {
let fullPath = path.join(dir, entry.name);
if (entry.isDirectory()) {
console.log(`directory: ${fullPath}`)
generateComponents(fullPath);
} else if (entry.isFile()) {
//Do some code with fullPath file
console.log(`filename: ${fullPath}`)
} else {
// apparently there are some other things that could be here
// like a symlink, so this is defensive coding
console.log(`unexpected type: ${fullPath}`);
}
});
}