¿Node.js requiere todos los archivos en una carpeta?

Resuelto Harry asked hace 13 años • 15 respuestas

¿Cómo necesito todos los archivos en una carpeta en node.js?

necesito algo como:

files.forEach(function (v,k){
  // require routes
  require('./routes/'+v);
}};
Harry avatar Mar 20 '11 04:03 Harry
Aceptado

Cuando a require se le proporciona la ruta de una carpeta, buscará un archivo index.js en esa carpeta; si hay uno, lo usa, y si no lo hay, falla.

Probablemente tendría más sentido (si tiene control sobre la carpeta) crear un archivo index.js y luego asignar todos los "módulos" y luego simplemente solicitarlo.

tuarchivo.js

var routes = require("./routes");

index.js

exports.something = require("./routes/something.js");
exports.others = require("./routes/others.js");

Si no conoce los nombres de los archivos, debería escribir algún tipo de cargador.

Ejemplo práctico de un cargador:

var normalizedPath = require("path").join(__dirname, "routes");

require("fs").readdirSync(normalizedPath).forEach(function(file) {
  require("./routes/" + file);
});

// Continue application logic here
tbranyen avatar Mar 19 '2011 23:03 tbranyen

Recomiendo usar glob para realizar esa tarea.

var glob = require( 'glob' )
  , path = require( 'path' );

glob.sync( './routes/**/*.js' ).forEach( function( file ) {
  require( path.resolve( file ) );
});
Diogo Cardoso avatar Mar 10 '2015 23:03 Diogo Cardoso

Basándome en la solución de @tbranyen, creo un index.jsarchivo que carga javascripts arbitrarios en la carpeta actual como parte del archivo exports.

// Load `*.js` under current directory as properties
//  i.e., `User.js` will become `exports['User']` or `exports.User`
require('fs').readdirSync(__dirname + '/').forEach(function(file) {
  if (file.match(/\.js$/) !== null && file !== 'index.js') {
    var name = file.replace('.js', '');
    exports[name] = require('./' + file);
  }
});

Entonces puedes acceder requirea este directorio desde cualquier otro lugar.

Greg Wang avatar Jun 20 '2013 02:06 Greg Wang

Otra opción es utilizar el paquete require-dir que le permite hacer lo siguiente. También admite la recursividad.

var requireDir = require('require-dir');
var dir = requireDir('./path/to/dir');
studgeek avatar Aug 28 '2012 14:08 studgeek