355 votes

node.js exiger de tous les fichiers dans un dossier?

Comment puis-je exiger de tous les fichiers dans un dossier dans node.js?

besoin de quelque chose comme:

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

553voto

tbranyen Points 2922

Il serait probablement plus judicieux (si vous avez le contrôle sur le dossier) pour créer un index.js fichier et ensuite affecter tous les "modules", puis tout simplement exiger que.

yourfile.js

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

index.js

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

Si vous ne connaissez pas les noms de fichiers, vous devez écrire une sorte de chargeur.

Exemple de travail d'un loader:

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

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

// Continue application logic here

72voto

Greg Wang Points 462

Base sur @tbranyen la solution, j'ai créer un index.js fichier charge arbitraire javascripts sous dossier en cours dans le cadre de l' 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/g) !== null && file !== 'index.js') {
    var name = file.replace('.js', '');
    exports[name] = require('./' + file);
  }
});

Vous pouvez alors require ce répertoire à partir de n'importe où ailleurs.

66voto

studgeek Points 4617

Une autre option est d'utiliser le package require-dir qui vous permet d'effectuer les opérations suivantes. Il prend en charge la récursivité.
var requireDir = require('require-dir');

8voto

Stephen Handley Points 580

7voto

blented Points 187

J'ai un dossier /champs plein de fichiers avec une seule classe chaque, ex:

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

Déposer ce dans fields/index.js d'exportation pour chaque classe:

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);

Cela rend les modules agissent plus comme ils le feraient en Python:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X