qu'est-ce que le module nodejs

青灯夜游
Libérer: 2021-10-29 15:23:03
original
1873 Les gens l'ont consulté

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.

qu'est-ce que le module nodejs

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');
}
Copier après la connexion

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');
}
Copier après la connexion

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();
Copier après la connexion

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
Copier après la connexion

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');
}
Copier après la connexion

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
Copier après la connexion

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();
Copier après la connexion

À 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
Copier après la connexion

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();
Copier après la connexion

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
Copier après la connexion
.

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
Copier après la connexion

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');
}
Copier après la connexion
// 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');
}
Copier après la connexion

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
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!