Comment dois-je exiger tous les fichiers d'un dossier dans node.js?
besoin de quelque chose comme:
files.forEach(function (v,k){
// require routes
require('./routes/'+v);
}};
Comment dois-je exiger tous les fichiers d'un dossier dans node.js?
besoin de quelque chose comme:
files.forEach(function (v,k){
// require routes
require('./routes/'+v);
}};
var routes = require('auto-load')('routes');
avec le nouveauauto-load
module [j'ai aidé à le créer].Réponses:
Lorsque require reçoit le chemin d'un dossier, il recherche un fichier index.js dans ce dossier; s'il y en a un, il l'utilise, et s'il n'y en a pas, il échoue.
Il serait probablement plus judicieux (si vous avez le contrôle sur le dossier) de créer un fichier index.js, puis d'affecter tous les "modules" et de simplement l'exiger.
yourfile.js
index.js
Si vous ne connaissez pas les noms de fichiers, vous devez écrire une sorte de chargeur.
Exemple de travail d'un chargeur:
la source
require
est donné le chemin d'un dossier, il recherchera unindex.js
dans ce dossier; s'il y en a un, il l'utilise, et s'il n'y en a pas, il échoue. Voir github.com/christkv/node-mongodb-native pour un exemple concret de ceci: Il y aindex.js
dans le répertoire racine qui nécessite./lib/mongodb
, un répertoire;./lib/mongodb/index.js'
rend tout le reste de ce répertoire disponible.require
est une fonction synchrone, il n'y a donc aucun avantage à être rappelé. J'utiliserais plutôt fs.readdirSync.package.json
dans ce répertoire. Comme ça:{main: './lib/my-custom-main-file.js'}
Je recommande d'utiliser glob pour accomplir cette tâche.
la source
glob
? tu veux direglob-savior-of-the-nodejs-race
. Meilleure réponse.Sur la base de la solution de @ tbranyen, je crée un
index.js
fichier qui charge des javascripts arbitraires dans le dossier actuel dans le cadre duexports
.Ensuite, vous pouvez
require
ce répertoire à partir de n'importe où ailleurs.la source
/\.js(on)?$/
serait mieux. Ce n'est pas non plus!== null
redondant?Une autre option consiste à utiliser le package require-dir qui vous permet d'effectuer les opérations suivantes. Il prend également en charge la récursivité.
la source
require-dir
car il exclut automatiquement le fichier appelant (index) et revient par défaut au répertoire courant. Parfait.require-dir
ajouté unefilter
option.J'ai un dossier / champs plein de fichiers avec une seule classe chacun, ex:
Déposez ceci dans fields / index.js pour exporter chaque classe:
Cela fait que les modules agissent plus comme ils le feraient en Python:
la source
Une autre option consiste à exiger-dir-all combinant les fonctionnalités des packages les plus populaires.
Le plus populaire
require-dir
n'a pas d'options pour filtrer les fichiers / répertoires et n'a pas demap
fonction (voir ci-dessous), mais utilise une petite astuce pour trouver le chemin actuel du module.Le second par la popularité
require-all
est le filtrage et le prétraitement des expressions rationnelles, mais il manque un chemin relatif, vous devez donc utiliser__dirname
(cela a des avantages et des contras) comme:Mentionné ici
require-index
est assez minimaliste.Avec
map
vous, vous pouvez effectuer un prétraitement, comme créer des objets et transmettre des valeurs de configuration (en supposant que les modules sous les constructeurs exportent):la source
Je sais que cette question a plus de 5 ans, et les réponses données sont bonnes, mais je voulais quelque chose d'un peu plus puissant pour express, alors j'ai créé le
express-map2
package pour npm. J'allais simplement le nommerexpress-map
, mais les gens de Yahoo ont déjà un paquet avec ce nom, j'ai donc dû renommer mon paquet.1. utilisation de base:
utilisation du contrôleur:
2. utilisation avancée, avec préfixes:
Comme vous pouvez le voir, cela permet d'économiser une tonne de temps et de simplifier l'écriture, la maintenance et la compréhension du routage de votre application. il prend en charge tous les verbes http qui expriment les supports, ainsi que la
.all()
méthode spéciale .la source
Un module que j'ai utilisé pour ce cas d'utilisation exact est require-all .
Il nécessite récursivement tous les fichiers dans un répertoire donné et ses sous-répertoires tant qu'ils ne correspondent pas à la
excludeDirs
propriété.Il permet également de spécifier un filtre de fichiers et comment dériver les clés du hachage retourné à partir des noms de fichiers.
la source
J'utilise un module de copie de modules de nœuds pour créer un fichier unique nécessitant tous les fichiers de notre système basé sur NodeJS.
Le code de notre fichier utilitaire ressemble à ceci:
Dans tous les fichiers, la plupart des fonctions sont écrites comme des exportations, comme ceci:
Donc, pour utiliser n'importe quelle fonction d'un fichier, il suffit d'appeler:
la source
Développer cette
glob
solution. Faites-le si vous souhaitez importer tous les modules d'un répertoire dansindex.js
, puis l'importerindex.js
dans une autre partie de l'application. Notez que les littéraux de modèle ne sont pas pris en charge par le moteur de mise en évidence utilisé par stackoverflow, le code peut donc sembler étrange ici.Exemple complet
Structure du répertoire
globExample / example.js
globExample / foobars / index.js
globExample / foobars / inattendu.js
globExample / foobars / barit.js
globExample / foobars / fooit.js
Du projet à l'intérieur avec
glob
installé , exécuteznode example.js
la source
Peut utiliser: https://www.npmjs.com/package/require-file-directory
la source
Exiger tous les fichiers du
routes
dossier et appliquer en tant que middleware. Aucun module externe requis.la source
En utilisant cette fonction, vous pouvez exiger un répertoire entier.
la source
Si vous incluez tous les fichiers de * .js dans l'exemple de répertoire ("app / lib / *. Js"):
Dans le répertoire app / lib
example.js:
exemple-2.js:
Dans l'application d'annuaire, créez index.js
index.js:
la source