Cómo usar `readdirSync` en Node.js para obtener todos los archivos de un directorio y sus subdirectorios.
Para procesar archivos en Node.js primero hay que buscarlos y a veces estos se encuentran en un directorio o incluso en subdirectorios anidados. Podemos usar el método del File System fs.readdirSync para obtener estos archivos de manera recursiva.
Podemos utilizar fs.readdirSync, junto con fs.statSync y path.extname, para recorrer de forma recursiva todas las carpetas desde un punto de inicio y filtrar los archivos por su extensión. Este es un patrón común en tareas como generar índices, cargar archivos de configuración o aplicar transformaciones.
const fs = require('fs');const path = require('path');
function readFilesRecursively(dir, allowedExtensions = []) { let results = [];
const entries = fs.readdirSync(dir);
for (const entry of entries) { const fullPath = path.join(dir, entry); const stats = fs.statSync(fullPath);
if (stats.isDirectory()) { results = results.concat(readFilesRecursively(fullPath, allowedExtensions)); } else { if ( allowedExtensions.length === 0 || allowedExtensions.includes(path.extname(fullPath)) ) { results.push(fullPath); } } }
return results;}
// Ejemplo: obtener sólo archivos con extensión .js y .jsonconst files = readFilesRecursively('./src', ['.js', '.json']);console.log(files);De esta manera:
Puede adaptarse fácilmente para incluir exclusiones de carpetas, ordenar resultados o procesar cada archivo sobre la marcha.
Con una función recursiva basada en readdirSync, es posible recorrer cualquier estructura de carpetas en Node.js para obtener todos los archivos deseados. Esta técnica, aunque síncrona, resulta útil en scripts de línea de comandos, herramientas internas o situaciones donde la simplicidad y la ejecución secuencial tienen prioridad sobre el rendimiento en concurrencia.