Système de modules Node.js


Afin de permettre aux fichiers Node.js de s'appeler, Node.js fournit un système de modules simple.

Les modules sont les composants de base des applications Node.js. Il existe une correspondance biunivoque entre les fichiers et les modules. Autrement dit, un Un fichier Node.js est un module qui peut être du code JavaScript, JSON ou une extension C/C++ compilée.

Créer un module

Dans Node.js, créer un module est très simple Comme suit nous créons un fichier 'main.js' avec le code suivant :

var hello = require('./hello');
hello.world();

Dans l'exemple ci-dessus, le code require('./hello') introduit le fichier hello.js dans le répertoire courant (./ est le répertoire courant et le suffixe par défaut de node.js est js).

Node.js fournit deux objets, exports et require, où exports est l'interface exposée par le module, et require est utilisé pour obtenir l'interface d'un module de l'extérieur, c'est-à-dire l'objet exports du module. module obtenu.

Ensuite nous créons le fichier hello.js, le code est le suivant :

exports.world = function() {
  console.log('Hello World');
}

Dans l'exemple ci-dessus, hello.js utilise l'objet exports comme interface d'accès du module, dans main .js Chargez ce module via require('./hello'), et vous pourrez ensuite y accéder directement Renseignez-vous sur les fonctions membres de l'objet exports dans hello.js.

Parfois, nous voulons simplement encapsuler un objet dans un module. Le format est le suivant :

module.exports = function() {
  // ...
}

Par exemple :

//hello.js 
function Hello() { 
	var name; 
	this.setName = function(thyName) { 
		name = thyName; 
	}; 
	this.sayHello = function() { 
		console.log('Hello ' + name); 
	}; 
}; 
module.exports = Hello;

De cette façon, vous pouvez obtenir l'objet. directement :

//main.js 
var Hello = require('./hello'); 
hello = new Hello(); 
hello.setName('BYVoid'); 
hello.sayHello();

Le seul changement dans l'interface du module est l'utilisation de module.exports = Hello au lieu de exports.world = function(){}. Lorsque le module est référencé en externe, son objet d'interface est l'objet Hello lui-même à afficher, et non l'objet original. exportations.


Où placer les modules côté serveur

Peut-être avez-vous remarqué que nous avons utilisé des modules dans le code ? Comme ceci :

var http = require("http");

...

http.createServer(...);

Node.js est livré avec un module appelé "http", nous le demandons dans notre code et attribuons la valeur de retour à une variable locale.

Cela transforme notre variable locale en un objet avec toutes les méthodes publiques fournies par le module http.

La stratégie de recherche de fichiers dans la méthode require de Node.js est la suivante :

Puisqu'il existe 4 types de modules (modules natifs et 3 types de modules de fichiers) dans Node.js, bien que la méthode require soit extrêmement simple, le chargement interne est cependant très compliqué et ses priorités de chargement sont également différentes. Comme le montre la figure ci-dessous :

nodejs-require

Chargement depuis le cache du module de fichier

Bien que les priorités des modules natifs et des modules de fichier soient différentes, elles ne seront pas prioritaires sur le chargement à partir du fichier cache de module. Module déjà existant.

Chargement à partir de modules natifs

La priorité des modules natifs est juste derrière la priorité du cache des modules de fichiers. Après avoir analysé le nom du fichier, la méthode require vérifie d'abord si le module est dans la liste des modules natifs. Prenons l'exemple du module http. Bien qu'il existe un fichier http/http.js/http.node/http.json dans le répertoire, require("http") ne sera pas chargé à partir de ces fichiers, mais à partir du module natif.

Les modules natifs ont également une zone de cache et sont également chargés en premier depuis la zone de cache. Si la zone de cache n'a pas été chargée, la méthode native de chargement du module est appelée pour le chargement et l'exécution.

Chargement à partir du fichier

Lorsque le cache du module de fichier n'existe pas et n'est pas un module natif, Node.js analysera les paramètres passés dans la méthode require et chargera le module réel à partir du fichier Les détails du fichier système, de l'empaquetage et de la compilation pendant le processus de chargement ont été introduits dans la section précédente, nous décrirons ici en détail le processus de recherche de modules de fichiers. Il y a également quelques détails qui méritent d'être connus. La méthode

require accepte les paramètres suivants :

  • http, fs, path, etc., modules natifs.

  • ./mod ou ../mod, module de fichier avec chemin relatif.

  • /pathtomodule/mod, le module fichier du chemin absolu.

  • mod, un module de fichiers pour les modules non natifs.