2017-09-18 8 views
0

Je n'arrive pas à comprendre comment la méthode require du noeud est capable de résoudre les chemins relatifs.Comment node.js nécessite-t-il que la méthode interprète les chemins relatifs?

Disons que j'ai une structure de fichier comme ceci:

root 
|--- main.js 
| 
|--- importantUtilities.js 
| 
|--- apps 
    | 
    |--- app1.js 

Si les deux /root/main.js et /root/apps/app1.js veulent exiger /root/importantUtilities.js, ils Paramétrez le différemment fonction require:

// File: /root/main.js 

... 
require('./importantUtilities.js'); 
... 

// File: /root/apps/app1.js: 

... 
require('../importantUtilities.js'); 
... 

Il n'y a pas besoin de préfixe __dirname, et je ne vois pas comment fonctionne require sans cette information.

Comment mettre en œuvre require pour renvoyer le même fichier pour différents descripteurs de fichier?

EDIT: Le fait que l'exemple suivant fonctionne souffle aussi mon esprit (en utilisant la même structure de fichier):

// File: /root/main.js: 

... 
module.exports.getUtilities = function() { return require('./importantUtilities.js'); }; 
var utilities = module.exports.getUtilities(); // Works fine 
... 

// File: /root/apps/app1.js: 

... 
var main = require('../main.js'); 
var utilities = main.getUtilities(); // Works fine 
... 

Il semble que require est même pas déterminer le chemin de base du champ d'appel; Il est plus important que chaque occurrence de require dans le code source soit liée aux informations de chemin de fichier du code source. Est-ce correct?

Comment cela fonctionne-t-il?

Répondre

0

toutes les occurrences de besoin dans le code source est lié avec filepath du code source de l'information

Oui, c'est tout à fait correct. Plus précisément, selon docs:

exigent (X) du module à chemin Y

  1. Si X commence par './' ou '/' ou ' ../ '

    a. LOAD_AS_FILE (Y + X)

à-dire qu'il concatène le chemin de fichier courant avec le chemin d'accès étant require d.

+0

C'est presque comme un pré-traitement! Exactement le lien de docs que je recherchais: D –