Maison > interface Web > js tutoriel > le corps du texte

Explication détaillée du chargement du module Nodejs et du principe de fonctionnement

小云云
Libérer: 2018-02-24 09:07:27
original
2777 Les gens l'ont consulté

Lors de l'utilisation de Nodejs, il est inévitable de référencer des modules tiers. Certains d'entre eux sont livrés avec Nodejs (par exemple : http, net...), et certains sont publiés sur npm (par exemple : mssql, elasticsearch.. .)

Ce chapitre se concentre sur 3 problématiques :

  1. Le processus de chargement du module Nodejs.

  2. Le processus de démarrage de l'application.

  3. Comment l'application charge les modules dépendants.

1. Processus de chargement des modules

Les modules Nodejs peuvent être grossièrement divisés en 4 types :

a) module intégré Nodejs module fourni en C++.

b) module constante Un module qui définit les constantes dans Nodejs.

c) module natif Module fourni sous forme javascript dans Nodejs.

d) Module tiers Modules fournis par des tiers.

Regardons d'abord le processus de génération du module intégré et du module natif.

La génération du module JS natif est relativement compliquée. Après compilation, un node_natives.h sera généré dans le répertoire /out/release/obj/gen.

Ce fichier est généré par js2c.py, qui convertit tous les fichiers js du répertoire lib du code source Nodejs en codes ASCII et les stocke dans le tableau correspondant.

Le processus de génération du module C++ intégré est relativement simple. Chaque entrée du module C++ intégré sera développée en fonction via la macro NODE_MODULE_CONTEXT_AWARE_BUILTIN. Par exemple, pour le module tcp_wrap, il. sera développé en fonction d'attribut (constructeur) static void register_tcp_wrap().

Les amis qui connaissent GCC savent que la fonction modifiée par attribut (constructeur) sera exécutée avant la fonction main() de Nodejs En d'autres termes, le module C++ intégré sera chargé avant la fonction main(). fonction. modlist_builtin list, et modlist_builtin est un pointeur de type struct node_module, get_builtin_module() parcourra pour trouver le module dont nous avons besoin.

En fait, qu'il s'agisse d'un module JS naïf ou d'un module C++ intégré, il sera éventuellement compilé dans un fichier exécutable. Les méthodes d'extraction des deux sont assez différentes. Le module js utilise process.binding('natives'), tandis que le module C++ utilise directement get_builtin_module().

Une fonction liaison() est fournie dans node.cc. Lorsque nous utilisons require() pour référencer un autre module, la fonction liaison() sera introduite. Analysons cette fonction :

On peut voir visuellement que la fonction dessert principalement trois modules : intégré, constants et natif.

builtin a la priorité la plus élevée et sera recherché dans modlist_builtin. Le processus est très simple, il suffit de parcourir toute la liste et de rechercher les modules portant le même nom. Une fois trouvée, la fonction d'enregistrement du module sera exécutée en premier, puis les exportations de données seront renvoyées.

Le module constantes a la deuxième priorité, et les définitions de constantes dans Nodejs sont exportées via des constantes.

natif a la priorité la plus basse.

2. Processus de démarrage de l'application

L'image ci-dessus est un organigramme, qui décrit le démarrage de test.js comme un paramètre Begin et éventuellement être exécuté. L'ensemble du processus peut être divisé en 4 étapes :

1. Nœud de fichier exécutable : entrée du nœud, qui joue principalement le rôle de préparation de l'environnement lors du processus de démarrage

2.src/node.js : script de démarrage

3.Native Module : Préparer l'exécution de module.js

4.module.js : module natif, utilisé pour charger, compiler et exécuter des applications

Comment l'application charge les modules dépendants

Comme mentionné précédemment, NativeModule.require() est uniquement chargé d'aider à référencer les modules natifs, ce qui est suffisant pour lib/module.js.

Mais il est évident que les applications générales doivent référencer non seulement le module matatives, mais également les modules tiers. Jetons un coup d'œil à la fonction Module.prototype._require() dans module.js.

Recommandations associées :

Utilisation de base du module nodejs nodemailer - Envoi d'un exemple de code par e-mail prenant en charge les pièces jointes (image)

Compréhension approfondie de NodeJS

nodeJS implémente le partage de fonctions WeChat

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!