web-dev-qa-db-fra.com

À quoi sert généralement index.js dans les projets node.js

Autre qu’un moyen pratique d’exiger tous les fichiers d’un répertoire ( node.js requiert tous les fichiers d’un dossier? ), à quoi sert index.js principalement; a-t-il un utilitaire de "meilleures pratiques"?

42
alh

Lorsque vous passez un dossier à require du noeud (), il recherchera un package.json pour un noeud final. Si ce n'est pas défini, il recherche index.js, et enfin index.node (un format d'extension c ++). Donc, index.js est probablement le point d’entrée pour avoir besoin d’un module.

Voir les documents officiels ici: http://nodejs.org/api/modules.html#modules_folders_as_modules .

En outre, vous demandez comment exiger tous les fichiers d'un répertoire. En règle générale, vous avez besoin d’un répertoire avec index.js qui expose une interface encapsulée à ces fichiers; la façon de faire sera différente pour chaque module. Mais supposons que vous vouliez inclure le contenu d'un dossier lorsque vous l'incluez (remarque: ce n'est pas une pratique recommandée et apparaît moins souvent que vous ne le pensez). Ensuite, vous pouvez utiliser un fichier index.js qui charge tous les fichiers de l’annuaire de manière synchrone (définir les exportations de manière asynchrone revient généralement à demander de terribles bugs) et les attache à module.exports comme suit:

var path = require('path'),
    dir = require('fs').readdirSync(__dirname + path.sep);

dir.forEach(function(filename){

    if(path.extname(filename) === '.js' && filename !== 'index.js'){
        var exportAsName = path.basename(filename);
        module.exports[exportAsName] = require( path.join( __dirname, filename) );
    }

});

Je ne vois presque jamais de gens qui souhaitent utiliser ce modèle - la plupart du temps, vous voulez que votre index.js aille comme 

var part1 = require('./something-in-the-directory'),
    part2 = require('./something-else');
....
module.exports = myCoolInterfaceThatUsesPart1AndPart2UnderTheHood;
32
MattNewton

Voici un bon article expliquant comment Node.js recherche le module requis https://medium.freecodecamp.org/requiring-modules-in-node-js-everything-you-neo-to-know-e7fbd119be8 , avec dossier et fichier index.js

Les modules ne doivent pas nécessairement être des fichiers. Nous pouvons également créer un dossier find-me sous node_modules et placez un fichier index.js dedans. Le même require ('find-me') utilisera le fichier index.js de ce dossier:

~/learn-node $ mkdir -p node_modules/find-me
~/learn-node $ echo "console.log('Found again.');" > node_modules/find-me/index.js
~/learn-node $ node
> require('find-me');
Found again.
{}
>
1
onmyway133