Les modules sont les composants de base des applications Node.js. Les fichiers et les modules sont en correspondance biunivoque. Un module Nodejs est un fichier, et ce fichier peut être du code JavaScript, du JSON ou une extension "C/C++" compilée. . L'instruction "require('file path')" peut être utilisée pour référencer des modules.
L'environnement d'exploitation de ce tutoriel : système windows7, nodejs version 12.19.0, ordinateur Dell G3.
Afin de permettre aux fichiers Node.js de s'appeler, Node.js propose un système de modules simple.
Les modules sont les composants de base des applications Node.js, et les fichiers et les modules ont une correspondance biunivoque. En d'autres termes, un fichier Node.js est un module, qui peut être du code JavaScript, JSON ou une extension C/C++ compilée.
Pour nodejs, un fichier est un module. Vous pouvez exporter l'interface ou demander l'arrivée d'autres modules.
// module1.js exports.func1 = function(){ console.log('func1 from module1 called'); }
module1 utilise la fonction func1 comme interface d'accès public du module via l'objet exports.
//module2.js var in_module1 = require('./module1.js'); in_module1.func1(); exports.func2 = function(){ console.log('func2 from module2 called'); }
module2 nécessite module1 À l'heure actuelle, in_module1 est équivalent à l'objet exports de module1. Lorsque vous utilisez in_module1 pour appeler func1, cela équivaut à appeler func1 via l'objet exports de module1.
Dans le même temps, la propre fonction func2 de module2 sert également d'interface publique de module2 via l'objet d'exportation du module.
// module3.js var in_module2 = require('./module2.js'); in_module2.func2();
De même, module3 nécessite module2. À l'heure actuelle, in_module2 est équivalent à l'objet exports de module2.
Les résultats d'exécution sont les suivants :
rlan@rlan-LA:~/nodejs/nodetest$ node module2.js func1 from module1 called rlan@rlan-LA:~/nodejs/nodetest$ node module3.js func1 from module1 called func2 from module2 called
Le module introduit par nodejs obtient non seulement l'interface publique du module, mais fait également référence à d'autres instructions dans le fichier, par exemple :
module1.js est remplacé par
// module2.js console.log('this is in module2'); var in_module1 = require('./module1.js'); in_module1.func1(); exports.func2 = function(){ console.log('func2 from module2 called'); }
module2 introduit module1 La fonction func1 exécute également l'instruction print dans module1 :
rlan@rlan-LA:~/nodejs/nodetest$ node module1.js this is in module1 rlan@rlan-LA:~/nodejs/nodetest$ node module2.js this is in module2 - module2 self this is in module1 - require module1 func1 from module1 called - module2 self
Maintenant, module2 charge module1, module3 charge module2, que se passe-t-il si module3 charge à nouveau module1 ?
// module3.js var in_module1 = require('./module1.js'); var in_module2 = require('./module2.js'); in_module1.func1(); in_module2.func2();
À ce moment, le module3 charge d'abord le module1, puis le module2, et le module2 lui-même charge la partie du module1. Le résultat en cours d'exécution est
rlan@rlan-LA:~/nodejs/nodetest$ node module3.js this is in module1 - require module1 this is in module2 - require module2 func1 from module1 called - require module2 func1 from module1 called - module3 self func2 from module2 called - module3 self
Si l'ordre requis du module3 est ajusté :
// module3.js var in_module2 = require('./module2.js'); var in_module1 = require('./module1.js'); in_module1.func1(); in_module2.func2();
Le résultat en cours d'exécution est :
rlan@rlan-LA:~/nodejs/nodetest$ node module3.js this is in module2 - require module2 this is in module1 - require module2 func1 from module1 called - require module2 func1 from module1 called - module3 self func2 from module2 called - module3 self
Il semble que nodejs utilise un mécanisme pour garantir que le même module ne sera pas chargé à plusieurs reprises dans un autre module, donc la ligne
this is in module1
n'apparaît qu'une seule fois, bien qu'elle semble être chargée deux fois dans module3.js.
Alors, que se passe-t-il s'il y a un chargement en boucle ? Maintenant, nous laissons module1 exiger le module2 :
// module1.js console.log('this is in module1'); var in_module2 = require('./module2.js'); exports.func1 = function(){ console.log('func1 from module1 called'); }
// module2.js console.log('this is in module2'); var in_module1 = require('./module1.js'); in_module1.func1(); exports.func2 = function(){ console.log('func2 from module2 called'); }
Les résultats d'exécution sont les suivants :
rlan@rlan-LA:~/nodejs/nodetest$ node module1.js this is in module1 this is in module2 /home/rlan/nodejs/nodetest/module2.js:4 in_module1.func1(); ^ TypeError: in_module1.func1 is not a function at Object.<anonymous> (/home/rlan/nodejs/nodetest/module2.js:4:12) at Module._compile (module.js:410:26) at Object.Module._extensions..js (module.js:417:10) at Module.load (module.js:344:32) at Function.Module._load (module.js:301:12) at Module.require (module.js:354:17) at require (internal/module.js:12:17) at Object.<anonymous> (/home/rlan/nodejs/nodetest/module1.js:3:18) at Module._compile (module.js:410:26) at Object.Module._extensions..js (module.js:417:10) rlan@rlan-LA:~/nodejs/nodetest$ node module2.js this is in module2 this is in module1 func1 from module1 called
nodejs semble empêcher le comportement de chargement lui-même Lors de l'exécution de module2, le comportement est le même que celui du module1 qui ne charge pas le module2, et non. une erreur est signalée. Lors de l'exécution de module1, lorsque je suis allé au module2 et que j'ai ignoré l'instruction require module1, module2 a appelé func1 de module1 et le programme a mal tourné.
Pour résumer, les instructions require imbriquées qui chargent des modules (ou se chargent) à plusieurs reprises dans nodejs ne peuvent pas être exécutées correctement.
【Apprentissage recommandé : "Tutoriel Nodejs"】
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!