Maison >interface Web >Questions et réponses frontales >Processus de chargement du package nodejs

Processus de chargement du package nodejs

WBOY
WBOYoriginal
2023-05-18 10:27:37760parcourir

Node.js est un environnement d'exécution Javascript basé sur des E/S non bloquantes pilotées par des événements. Il nous permet d'organiser et de gérer le code plus facilement grâce à un système modulaire intégré. Dans Node.js, la modularisation est un concept important. Chaque fichier est traité comme un module indépendant, et ces modules peuvent être chargés via la fonction require.

Dans Node.js, le processus de chargement du module est principalement divisé en trois étapes : analyse du chemin, localisation du fichier et exécution de la compilation. Ci-dessous, nous présenterons en détail le processus et le principe de fonctionnement de ces trois étapes.

Analyse des chemins

Dans Node.js, il existe trois formes de chemins distinguables pour les modules :

  1. Chemins absolus : chemins commençant par / ou C : et autres chemins absolus.
  2. Chemin relatif : Un chemin commençant par un chemin relatif tel que ./ ou ../. Le chemin relatif est relatif au répertoire où se trouve le fichier actuel.
  3. Chemin du module : en utilisant le nom du module ou le chemin où se trouve le fichier du module comme identifiant, vous pouvez charger d'autres modules dans le module via la fonction require.

Lorsque nous appelons la fonction require et transmettons un paramètre de chemin, Node.js effectuera une analyse de chemin selon les règles suivantes :

  1. Si le chemin absolu est transmis, il sera utilisé directement comme chemin de module à être chargé.
  2. Si un chemin relatif est transmis, il sera converti en chemin absolu en tant que chemin du module à charger.
  3. Si le chemin du module est transmis, suivez les étapes suivantes :

    a. Utilisez le chemin du module comme valeur clé et vérifiez si le module a été chargé dans l'objet cache du module. S'il a été chargé, renvoyez-le. directement le module. L'objet exports du module.

    b. Si le module n'a pas été chargé dans le cache du module, suivez les étapes suivantes pour le trouver :

    i Si le nom du module contient /, le chemin du module est considéré comme un chemin absolu et est chargé directement.

    ii. Si le nom du module commence par un chemin relatif tel que ./ ou ../, le chemin sera converti en chemin absolu puis chargé.

    iii. Si le nom du module ne commence pas par . ou /, suivez les étapes suivantes pour le trouver :

       1. 从当前文件所在目录开始,往上逐级查找node_modules目录中是否包含有该模块名的文件夹,如果找到了,则加载该文件夹中的index.js文件。
    
       2. 如果在当前文件所在目录下没有找到该模块名的文件夹,则从当前目录的父目录开始,往上逐级查找node_modules目录中是否包含有该模块名的文件夹,直到到达系统根目录或者找到该模块名的文件夹为止。
    
       3. 如果在所有目录中都没有找到该模块名的文件夹,则抛出模块加载失败的异常。
    

De cette façon, grâce à l'analyse du chemin, nous pouvons trouver le chemin du fichier où se trouve le module. chargé est localisé.

Emplacement du fichier

Après avoir confirmé le chemin du module, Node.js tentera ensuite de localiser le module, c'est-à-dire de trouver le fichier correspondant au module.

Pour les fichiers Javascript, Node.js complétera le nom du suffixe en .js par défaut. S'il n'y a pas de suffixe dans le nom du fichier, Node.js tentera d'ajouter les suffixes .js, .json et .node dans l'ordre avant de lancer la recherche.

Lorsque vous essayez de trouver un fichier, si un répertoire portant le même nom que le chemin analysé est trouvé, Node.js traitera le répertoire comme un package.

Pour les packages, Node.js recherchera le fichier package.json dans ce répertoire pour obtenir le chemin du fichier d'entrée du package. Si le fichier package.json est trouvé, Node.js utilisera le chemin du module spécifié dans le champ principal comme fichier d'entrée. Si le champ principal n'est pas spécifié, index.js sera utilisé comme fichier d'entrée par défaut.

Si le fichier package.json est introuvable dans le répertoire du package, ou si le champ principal n'est pas spécifié dans le fichier package.json, Node.js utilisera index.js dans le répertoire du package comme fichier d'entrée par défaut.

Compiler et exécuter

Après avoir localisé le fichier, Node.js compilera et exécutera le fichier.

Pour les fichiers Javascript, Node.js utilisera le moteur V8 pour la compilation et l'exécution. Pendant le processus de compilation et d'exécution, Node.js encapsulera les variables et les méthodes du fichier dans une fermeture pour éviter la contamination et les conflits de variables et de méthodes. Dans le même temps, Node.js inclura également tout le code du fichier dans un bloc try...catch pour intercepter et lever l'exception.

Pendant le processus de compilation et d'exécution, Node.js décidera également de charger de manière récursive d'autres modules dont dépend le module, selon que le fichier contient ou non un appel de fonction require. Si le fichier contient un appel de fonction require, Node.js chargera les autres modules dont dépend le module selon la méthode décrite précédemment, et transmettra les objets d'export de ces modules dépendants en paramètres dans la fonction correspondant au fichier prévu à cet effet. utilisation des fichiers.

Résumé

Dans Node.js, le chargement de modules via la fonction require est une opération importante. Pendant le processus de chargement du module, Node.js passera par plusieurs étapes telles que l'analyse du chemin, l'emplacement du fichier, ainsi que la compilation et l'exécution pour charger et exécuter le module. La maîtrise du processus de chargement des modules de Node.js permet de mieux comprendre les idées de programmation modulaire de Node.js, améliorant ainsi l'efficacité du développement et la qualité du code.

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