393 Stimmen

benötigt node.js alle Dateien in einem Ordner?

Wie benötige ich alle Dateien in einem Ordner in node.js?

brauchen etwas wie:

files.forEach(function (v,k){
  // require routes
  require('./routes/'+v);
}};

594voto

tbranyen Punkte 8277

Wenn require den Pfad eines Ordners erhält, sucht es nach einer index.js-Datei in diesem Ordner; wenn es eine gibt, verwendet es diese, und wenn nicht, schlägt es fehl.

Es wäre wahrscheinlich am sinnvollsten (wenn Sie die Kontrolle über den Ordner haben), eine index.js-Datei zu erstellen und dann alle "Module" zuweisen und dann einfach erfordern, dass.

ihrfile.js

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

index.js

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

Wenn Sie die Dateinamen nicht kennen, sollten Sie eine Art Lader schreiben.

Arbeitsbeispiel für einen Lader:

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

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

// Continue application logic here

231voto

Diogo Cardoso Punkte 20469

Ich empfehle die Verwendung von Globus um diese Aufgabe zu erfüllen.

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

glob.sync( './routes/**/*.js' ).forEach( function( file ) {
  require( path.resolve( file ) );
});

77voto

Greg Wang Punkte 1357

Basierend auf der Lösung von @tbranyen erstelle ich eine index.js Datei, die beliebige Javascripts im aktuellen Ordner als Teil der 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);
  }
});

Dann können Sie require dieses Verzeichnis von einem beliebigen anderen Ort aus.

71voto

studgeek Punkte 13264

Eine weitere Möglichkeit ist die Verwendung des Pakets require-dir mit dem Sie Folgendes tun können. Es unterstützt auch Rekursion.

var requireDir = require('require-dir');
var dir = requireDir('./path/to/dir');

7voto

blented Punkte 2433

Ich habe einen Ordner /fields voller Dateien mit jeweils einer Klasse, z. B:

fields/Text.js -> Test class
fields/Checkbox.js -> Checkbox class

Fügen Sie dies in fields/index.js ein, um jede Klasse zu exportieren:

var collectExports, fs, path,
  __hasProp = {}.hasOwnProperty;

fs = require('fs');    
path = require('path');

collectExports = function(file) {
  var func, include, _results;

  if (path.extname(file) === '.js' && file !== 'index.js') {
    include = require('./' + file);
    _results = [];
    for (func in include) {
      if (!__hasProp.call(include, func)) continue;
      _results.push(exports[func] = include[func]);
    }
    return _results;
  }
};

fs.readdirSync('./fields/').forEach(collectExports);

Dadurch verhalten sich die Module eher wie in Python:

var text = new Fields.Text()
var checkbox = new Fields.Checkbox()

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X