Maison  >  Article  >  interface Web  >  Explication détaillée de la façon dont Node.js charge les modules et installe les instances de module

Explication détaillée de la façon dont Node.js charge les modules et installe les instances de module

伊谢尔伦
伊谢尔伦original
2017-07-24 10:17:571808parcourir

Les modules dans Node.js peuvent obtenir des références de modules via des chemins ou des noms de fichiers. La référence du module sera mappée sur un chemin de fichier js, sauf s'il s'agit d'un module intégré Node. Les modules intégrés de Node exposent aux développeurs certaines API couramment utilisées et ils sont préchargés au démarrage du processus Node.

D'autres, tels que les modules tiers ou les modules locaux installés via NPM, chaque module exposera une API publique. Pour que les développeurs puissent l'importer. Par exemple, après l'exécution de

var mod = require('module_name')

, Node chargera les modules intégrés ou les modules installés via NPM. La fonction require renvoie un objet. L'API exposée par l'objet peut être une fonction, un objet ou un attribut tel qu'une fonction, un tableau ou même tout type d'objet JS.

Voici les mécanismes de chargement et de mise en cache des modules de nœuds

1) Charger le module intégré (A Core Module)
2) Charger le module de fichiers (A File Module)
3) Chargez le module de répertoire de fichiers (A Folder Module)
4) Chargez le module dans node_modules
5) Mettez automatiquement en cache le module chargé

1 Chargez le module intégré

Les modules intégrés de Node sont compilés sous forme binaire et sont référencés directement par leur nom au lieu du chemin du fichier. Lorsqu'un module tiers porte le même nom qu'un module intégré, le module intégré écrasera le module tiers portant le même nom. Par conséquent, lors de la dénomination, vous devez faire attention à ne pas avoir le même nom que celui du module intégré. Par exemple, si vous obtenez un module http

var http = require('http')
, le http renvoyé est le module intégré de Node qui implémente la fonction HTTP.

2. Chargez le module de fichier

Chemin absolu

var myMod = require('/home/base/my_mod')
ou chemin relatif

var myMod = require('./my_mod')
Notez que l'extension est ignorée ici". js", les éléments suivants sont équivalents

var myMod = require('./my_mod')
var myMod = require('./my_mod.js')
3. Charger le module répertoire de fichiers

peut directement nécessiter un répertoire, en supposant qu'il existe un répertoire nommé dossier, tel que

var myMod = require('./folder')
À ce stade, Node recherchera dans tout le répertoire du dossier. Node supposera que le dossier est un package et essaiera de trouver le fichier de définition du package package.json. Si le répertoire du dossier ne contient pas le fichier package.json, Node supposera que le fichier principal par défaut est index.js et chargera index.js. Si index.js n'existe pas non plus, le chargement échouera.

Si la structure des répertoires est la suivante

Explication détaillée de la façon dont Node.js charge les modules et installe les instances de module

package.json est défini comme suit

{
    "name": "pack",
    "main": "modA.js"
}
À ce stade, require(' ./folder') renverra le module modA.js. Si package.json n'existe pas, le module index.js sera renvoyé. Si index.js n’existe pas non plus, une exception de chargement se produira.

4. Chargez le module dans node_modules

Si le nom du module n'est pas un chemin ou un module intégré, Node tentera de rechercher dans le dossier node_modules du répertoire actuel. Si les node_modules dans le répertoire actuel ne sont pas trouvés, Node recherchera à partir des node_modules dans le répertoire parent et récurera jusqu'au répertoire racine.

Ne vous inquiétez pas, la commande npm nous permet d'installer, désinstaller et mettre à jour facilement le répertoire node_modules.

5. Mise en cache automatique des modules chargés

Node mettra en cache les modules chargés sans avoir à chercher à nouveau à chaque fois. Voici un exemple

modA.js

console.log('模块modA开始加载...')
exports = function() {
    console.log('Hi')
}
console.log('模块modA加载完毕')
init.js

var mod1 = require('./modA')
var mod2 = require('./modA')
console.log(mod1 === mod2)
Exécution en ligne de commande :

node init.js

Entrez comme suit

Explication détaillée de la façon dont Node.js charge les modules et installe les instances de module

Vous pouvez voir que même si require est exécuté deux fois, modA.js n'est toujours exécuté qu'une seule fois. mod1 et mod2 sont identiques, c'est-à-dire que les deux références pointent vers le même objet module.

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!

Déclaration:
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