Maison interface Web js tutoriel Apprenez Nodejs avec moi (3) --- Compétences Node.js module_javascript

Apprenez Nodejs avec moi (3) --- Compétences Node.js module_javascript

May 16, 2016 pm 04:47 PM
node.js 模块

Présentation et informations

Grâce à l'API officielle de Node.js, vous pouvez voir que Node.js lui-même fournit de nombreux modules de base http://nodejs.org/api/ Ces modules de base sont compilés dans des fichiers binaires et peuvent nécessiter ('nom du module. ') Allez le chercher ; le module principal a la priorité de chargement la plus élevée (cela se reflétera lorsqu'il y aura un module portant le même nom que le module principal)

(Cette fois je parle principalement de modules personnalisés)

Node.js possède également un type de module appelé module de fichier, qui peut être un fichier de code JavaScript (.js comme suffixe de fichier), un fichier texte au format JSON (.json comme suffixe de fichier) ou un fichier édité. Fichier C/C (.node comme suffixe de fichier) ;

La méthode d'accès au module de fichier se fait via require('/filename.suffix') require('./filename.suffix') requrie('../filename.suffix') pour y accéder, le suffixe du fichier peut être omis ; avec Commencer par "/" signifie charger avec un chemin absolu, commencer par "./" et commencer par "../" signifie charger avec un chemin relatif, et commencer par "./" signifie charger des fichiers dans le même répertoire,

Comme mentionné précédemment, le suffixe du fichier peut être omis. Nodejs essaie de charger le fichier js prioritaire >

Créer un module personnalisé

Prenons un compteur comme exemple

Apprenez Nodejs avec moi (3) --- Compétences Node.js module_javascript

var outputVal = 0 //Valeur de sortie;
var incrément = 1; //Incrément
/* Définir la valeur de sortie*/
function seOutputVal (val) {
outputVal = val;
}
/* Définir l'incrément */
function setIncrement(incrementVal){
incrément = incrémentVal;
}
/* sortie*/
fonction printNextCount()
{
outputVal = incrément;
console.log(outputVal) ;
>
function printOutputVal() {
console.log(outputVal);
>
exports.seOutputVal = seOutputVal;
exports.setIncrement = setIncrement;
module.exports.printNextCount = printNextCount;
Exemple de code source du module personnalisé


L'exemple se concentre sur les exportations et module.exports ; il fournit une interface pour un accès externe. Appelons-le ci-dessous pour voir l'effet.

Appeler le module personnalisé

Apprenez Nodejs avec moi (3) --- Compétences Node.js module_javascript

/*
Un Node.js est un module, ce fichier peut être du code Javascript, JSON ou une extension C/C compilée.
Deux objets importants :
require consiste à obtenir le module de l'extérieur
exports consiste à exposer l'interface du module
*/
var counter = require('./1_modules_custom_counter');
console.log('Premier appel au module [1_modules_custom_counter]');
counter.seOutputVal(10); //Définir le comptage à partir de 10
counter.setIncrement (10);
counter.printNextCount); ();
counter.printNextCount();
counter.printNextCount();
counter.printNextCount();
/*
nécessite d'appeler le même module plusieurs fois Ne se chargera pas à plusieurs reprises
*/
var counter = require('./1_modules_custom_counter');
console.log('Deuxième appel au module [1_modules_custom_counter]');
counter.printNextCount( );
Custom mode appelant le code source

Lors de l'exécution, vous pouvez constater que toutes les méthodes exposées via exports et module.exports sont accessibles !

Comme vous pouvez le voir dans l'exemple, j'ai obtenu le module via require('./1_modules_custom_counter') deux fois, mais la méthode printNextCount() a démarré à partir de 60 après la deuxième référence~~~

La raison est que si node.js appelle le même module plusieurs fois via requirerequire, il ne sera pas chargé à plusieurs reprises. Node.js mettra en cache tous les modules de fichiers chargés en fonction du nom du fichier, il ne sera donc pas rechargé

Remarque : la mise en cache par nom de fichier fait référence au nom de fichier réel, et il ne sera pas considéré comme un fichier différent simplement parce que le formulaire du chemin entrant est différent

.

Il existe une méthode printOutputVal() dans le fichier 1_modules_custom_counter que j'ai créé, qui ne fournit pas de méthodes d'accès public externes via exports ou module.exports,

Que se passera-t-il si le fichier 1_modules_load est directement accédé et exécuté ?

La réponse est : TypeError : l'objet # n'a pas de méthode 'printOutputVal'

La différence entre les exportations et module.exports

Après l'exemple ci-dessus, il est accessible via les méthodes publiques exports et module.exports ! Donc, puisque les deux peuvent produire l'effet, il doit y avoir quelques différences ~~~ Prenons un exemple !

Apprenez Nodejs avec moi (3) --- Compétences Node.js module_javascript

Copier le code Le code est le suivant :
var counter = 0
exports; .printNextCount = function (){
counter = 2;
console.log(counter);
}
var isEq = (exports === module.exports);
console.log (isEq) ;
Code source du fichier 2_modules_diff_exports.js

Créons un nouveau fichier 2_modules_diff_exports_load.js et appelons-le

Apprenez Nodejs avec moi (3) --- Compétences Node.js module_javascript

Copier le code Le code est le suivant :
var Counter = require('./2_modules_diff_exports ');
Counter.printNextCount();

Après l'appel, le résultat de l'exécution est comme indiqué ci-dessus

J'affiche la valeur de isEq dans le fichier 2_modules_diff_exports_load.js ( var isEq = (exports === module.exports); ), et le vrai renvoyé

PS : Notez qu'il y a trois signes égaux. Si vous n'êtes pas sûr, veuillez vérifier vous-même les informations !

Ne vous précipitez pas pour tirer des conclusions, changez ces deux fichiers JS dans les codes correspondants de module.exports

Copier le code Le code est le suivant :
//Le code source 2_modules_diff_exports.js modifié est le suivant
var counter = 0;
module.exports = function(){
counter = 10;
this.printNextCount = function()
{
console.log( compteur);
}
>
var isEq = (exports === module.exports);
console.log(isEq);

Copier le code Le code est le suivant :
//La source du fichier 2_modules_diff_exports_load.js modifié le code est le suivant
var Counter = require('./2_modules_diff_exports');
var counterObj = new Counter();
counterObj.printNextCount();

Apprenez Nodejs avec moi (3) --- Compétences Node.js module_javascript

Après l'appel, le résultat de l'exécution est comme indiqué ci-dessus

J'ai affiché la valeur de isEq dans le fichier 2_modules_diff_exports_load.js ( var isEq = (exports === module.exports); ), et j'ai renvoyé false, ce qui est incohérent avec les résultats obtenus précédemment !

PS : N'utilisez pas Counter.printNextCount(); pour y accéder, vous n'aurez qu'un message d'erreur

L'API fournit des explications

http://nodejs.org/api/modules.html

Notez que exports est une référence à module.exports, ce qui le rend adapté uniquement à l'augmentation. Si vous exportez un seul élément tel qu'un constructeur, vous souhaiterez utiliser module.exports directement à la place.
exports n'est que module.exports. une référence d'adresse. Nodejs n'exportera que le point de module.exports. Si le pointeur d'exports change, cela signifie que exports ne pointe plus vers module.exports, il ne sera donc plus exporté

.

Se référer à d'autres interprétations :

http://www.hacksparrow.com/node-js-exports-vs-module-exports.html

http://zihua.li/2012/03/use-module-exports-or-exports-in-node/

module.exports est la véritable interface, et exports n'est qu'un outil auxiliaire pour celle-ci. Ce qui est finalement renvoyé à l'appel est module.exports au lieu d'exports.
Tous les attributs et méthodes collectés par les exports sont attribués à Module.exports. Bien sûr, il y a une prémisse pour cela, c'est-à-dire que module.exports lui-même n'a aucune propriété ni méthode.
Si module.exports possède déjà des propriétés et des méthodes, alors les informations collectées par les exportations seront ignorées.

les exportations et module.exports couvrent

Ce qui précède comprend également fondamentalement la relation et la différence entre exports et module.exports, mais quel est le résultat si exports et module.exports existent pour la méthode printNextCount() en même temps ?

Apprenez Nodejs avec moi (3) --- Compétences Node.js module_javascript

Résultat de l'appel

Apprenez Nodejs avec moi (3) --- Compétences Node.js module_javascript

Il ressort des résultats qu'aucune erreur n'est signalée, indiquant qu'elle peut être définie de cette manière, mais à la fin module.exports remplace les exportations

Bien que le résultat ne signalera pas d'erreur, il y aura inévitablement des problèmes lors du développement s'il est utilisé de cette manière, donc

1. Il est préférable de ne pas définir module.exports et exports séparément

2. Les développeurs NodeJs recommandent d'utiliser module.exports pour exporter des objets et exports

pour exporter plusieurs méthodes et variables.

Autres...

Il existe d'autres méthodes fournies dans l'API, donc je n'entrerai pas dans les détails. Sur la base de l'exemple ci-dessus, vous le saurez par vous-même dès que vous le sortirez

module.id

Renvoie l'identifiant du module de type chaîne, généralement le nom du fichier entièrement analysé

module.filename

Renvoie un nom de fichier entièrement analysé de type chaîne

Module.chargé

Renvoie un type booléen indiquant si le chargement est terminé

module.parent

Renvoie le module qui référence ce module

module.enfants

Renvoie un tableau de tous les objets de module référencés par ce module

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le module d'extension WLAN s'est arrêté [correctif] Le module d'extension WLAN s'est arrêté [correctif] Feb 19, 2024 pm 02:18 PM

S'il y a un problème avec le module d'extension WLAN sur votre ordinateur Windows, cela peut entraîner une déconnexion d'Internet. Cette situation est souvent frustrante, mais heureusement, cet article propose quelques suggestions simples qui peuvent vous aider à résoudre ce problème et à rétablir le bon fonctionnement de votre connexion sans fil. Réparer le module d'extensibilité WLAN s'est arrêté Si le module d'extensibilité WLAN a cessé de fonctionner sur votre ordinateur Windows, suivez ces suggestions pour le réparer : Exécutez l'utilitaire de résolution des problèmes réseau et Internet pour désactiver et réactiver les connexions réseau sans fil Redémarrez le service de configuration automatique WLAN Modifier les options d'alimentation Modifier Paramètres d'alimentation avancés Réinstaller le pilote de la carte réseau Exécuter certaines commandes réseau Examinons-le maintenant en détail

Le module d'extensibilité WLAN ne peut pas démarrer Le module d'extensibilité WLAN ne peut pas démarrer Feb 19, 2024 pm 05:09 PM

Cet article détaille les méthodes permettant de résoudre l'événement ID10000, qui indique que le module d'extension LAN sans fil ne peut pas démarrer. Cette erreur peut apparaître dans le journal des événements du PC Windows 11/10. Le module d'extensibilité WLAN est un composant de Windows qui permet aux fournisseurs de matériel indépendants (IHV) et aux fournisseurs de logiciels indépendants (ISV) de fournir aux utilisateurs des fonctionnalités de réseau sans fil personnalisées. Il étend les fonctionnalités des composants réseau Windows natifs en ajoutant la fonctionnalité par défaut de Windows. Le module d'extensibilité WLAN est démarré dans le cadre de l'initialisation lorsque le système d'exploitation charge les composants réseau. Si le module d'extension LAN sans fil rencontre un problème et ne peut pas démarrer, vous pouvez voir un message d'erreur dans le journal de l'Observateur d'événements.

Un article pour parler du contrôle de la mémoire dans Node Un article pour parler du contrôle de la mémoire dans Node Apr 26, 2023 pm 05:37 PM

Le service Node construit sur une base non bloquante et piloté par les événements présente l'avantage d'une faible consommation de mémoire et est très adapté à la gestion de requêtes réseau massives. Dans le contexte de demandes massives, les questions liées au « contrôle de la mémoire » doivent être prises en compte. 1. Le mécanisme de récupération de place du V8 et les limitations de mémoire Js sont contrôlés par la machine de récupération de place

Explication graphique détaillée de la mémoire et du GC du moteur Node V8 Explication graphique détaillée de la mémoire et du GC du moteur Node V8 Mar 29, 2023 pm 06:02 PM

Cet article vous donnera une compréhension approfondie de la mémoire et du garbage collector (GC) du moteur NodeJS V8. J'espère qu'il vous sera utile !

Parlons en profondeur du module File dans Node Parlons en profondeur du module File dans Node Apr 24, 2023 pm 05:49 PM

Le module de fichiers est une encapsulation des opérations de fichiers sous-jacentes, telles que l'ajout de lecture/écriture/ouverture/fermeture/suppression de fichiers, etc. La plus grande caractéristique du module de fichiers est que toutes les méthodes fournissent deux versions de **synchrone** et ** asynchrone**, with Les méthodes avec le suffixe sync sont toutes des méthodes de synchronisation, et celles qui n'en ont pas sont toutes des méthodes hétérogènes.

Python bibliothèques standard couramment utilisées et bibliothèques tierces module 2-sys Python bibliothèques standard couramment utilisées et bibliothèques tierces module 2-sys Apr 10, 2023 pm 02:56 PM

1. Introduction au module sys Le module os présenté précédemment est principalement destiné au système d'exploitation, tandis que le module sys de cet article est principalement destiné à l'interpréteur Python. Le module sys est un module fourni avec Python. C'est une interface permettant d'interagir avec l'interpréteur Python. Le module sys fournit de nombreuses fonctions et variables pour gérer différentes parties de l'environnement d'exécution Python. 2. Méthodes couramment utilisées du module sys Vous pouvez vérifier quelles méthodes sont incluses dans le module sys via la méthode dir() : import sys print(dir(sys))1.sys.argv-get les paramètres de ligne de commande sys. argv est utilisé pour implémenter la commande depuis l'extérieur du programme. Le programme reçoit des paramètres et il est capable d'obtenir la colonne des paramètres de la ligne de commande.

Programmation Python : explication détaillée des points clés de l'utilisation de tuples nommés Programmation Python : explication détaillée des points clés de l'utilisation de tuples nommés Apr 11, 2023 pm 09:22 PM

Préface Cet article continue de présenter le module de collection Python. Cette fois, il y introduit principalement les tuples nommés, c'est-à-dire l'utilisation de nommétuple. Sans plus tarder, commençons – n'oubliez pas d'aimer, de suivre et de transmettre ~ ^_^Création de tuples nommés La classe de tuple nommé nomméeTuples dans la collection Python donne un sens à chaque position dans le tuple et améliore la lisibilité du code sexuel et descriptif. Ils peuvent être utilisés partout où des tuples réguliers sont utilisés et ajoutent la possibilité d'accéder aux champs par nom plutôt que par index de position. Il provient des collections de modules intégrés Python. La syntaxe générale utilisée est : importer des collections XxNamedT

Parlons de la boucle d'événements dans Node Parlons de la boucle d'événements dans Node Apr 11, 2023 pm 07:08 PM

La boucle d'événements est un élément fondamental de Node.js et permet une programmation asynchrone en garantissant que le thread principal n'est pas bloqué. Comprendre la boucle d'événements est crucial pour créer des applications efficaces. L'article suivant vous donnera une compréhension approfondie de la boucle d'événements dans Node. J'espère qu'il vous sera utile !

See all articles