Maison >interface Web >js tutoriel >Explication détaillée de la façon dont Node.js charge les modules et installe les instances de module
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 httpvar 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 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 exemplemodA.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.jsEntrez comme suit 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!