Maison  >  Article  >  interface Web  >  Introduction à la définition de module dans nodejs

Introduction à la définition de module dans nodejs

不言
不言original
2018-06-30 14:31:481513parcourir

Cet article présente principalement la méthode de définition de module dans nodejs, et analyse les principes des modules nodejs, les modules communs et les méthodes de définition correspondantes sous forme d'exemples. Les amis dans le besoin peuvent s'y référer

Les exemples dans. cet article décrit la méthode de définition du module nodejs Medium. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

1. Définition du module

Le soi-disant module de nodejs est un fichier ! Un fichier .js est un module nodejs. Il existe une correspondance biunivoque entre les modules et les fichiers, le module référencé est require('file path').

Par exemple :

var circle = require('./circle.js');
console.log( 'The area of a circle of radius 4 is '
      + circle.area(4));

Ceci s'appelle foo.js

var PI = Math.PI;
exports.area = function (r) {
 return PI * r * r;
};
exports.circumference = function (r) {
 return 2 * PI * r;
};

Ceci s'appelle circle.js

Les deux fichiers de code js sont placés dans le même dossier.

Si vous souhaitez référencer des modules dans d'autres dossiers, écrivez directement le chemin. Le format du chemin ici est le même que celui de Linux : /../../.js C'est le chemin absolu, ../.js est la couche supérieure et ./.js est le chemin actuel.

Vous devez faire attention à la différence entre exports et module.exports ici : exports n'est en fait qu'une référence à module.exports (tout comme a=2, b=a, b fait simplement référence à a, quand b=c , b ne pointe plus vers a), afin que vous puissiez comprendre la signification du site officiel (si vous souhaitez déclarer la racine des exportations en fonction, ou si vous souhaitez générer un objet, alors veuillez utiliser le module. exportations au lieu d'exportations)

2. Référence circulaire

a.js :

console.log('a starting');
exports.done = false;
var b = require('./b.js');
console.log('in a, b.done = %j', b.done);
exports.done = true;
console.log('a done');

b.js :

console.log('b starting');
exports.done = false;
var a = require('./a.js');
console.log('in b, a.done = %j', a.done);
exports.done = true;
console.log('b done');

main.js :

console.log('main starting');
var a = require('./a.js');
var b = require('./b.js');
console.log('in main, a.done=%j, b.done=%j', a.done, b.done);

Vous le voyez, a.js et b.js se réfèrent l'un à l'autre. Est-ce que cela provoquera une boucle infinie ? Non, c'est juste qu'un module n'a pas été chargé, c'est-à-dire qu'une partie d'un module n'est pas disponible. Comme ici, a.js est chargé en premier, mais lors du chargement de a.js, a.js charge b.js. À ce stade, a.js est dans un état stagnant, seules les données devant require sont chargées, et pour. b.js Il sera toujours chargé. Voici le résultat de l'opération :

$ node main.js
main starting
a starting
b starting
in b, a.done = false
b done
in a, b.done = true
a done
in main, a.done=true, b.done=true

3. Module de base

Le soi-disant module de base. Le module principal est en fait des packages publics développés par nodejs, tout comme les packages publics de Java. Pour accéder au module principal, il suffit de require('file name'), afin de pouvoir y accéder. En fait, le package du module public est placé sous node_modulesnpmlib installé par nodejs.

4. Module Fichier

Lorsqu'il n'y a pas de correspondance exacte pour la soi-disant référence, nodejs utilisera d'abord l'extension : .js, .json, puis .node . Le fichier js est un fichier JavaScript, .json sera analysé au format json et .node sera chargé en tant que module supplémentaire avec dlopen

Il est également important de noter ici que lorsqu'il y a. pas de '/' ou './' Lors de la modification des symboles, le module est chargé dans node_modules Pour savoir où se trouve ce fichier, veuillez voir ci-dessous.

Dossier 5.node_modules

S'il n'y a pas de qualification de symbole de format telle que '/' '../' './' lors du référencement du module, alors il utilise La méthode de recherche est la suivante : Supposons que votre fichier se trouve dans '/home/ry/projects/foo.js' et qu'il référence require('bar.js'), alors la méthode de recherche bar.js est la suivante :

/home /ry/projects/node_modules/bar.js
/home/ry/node_modules/bar.js
/home/node_modules/bar.js
/node_modules/bar.js

C'est-à-dire qu'en partant de la plate-forme actuelle, ajoutez le dossier node_modules au répertoire parent étape par étape en tant qu'adresse du module.

require('example-module/path/to/file') Ce type de référence a la même analyse que require('bar.js').

6. Référencez le module par le nom du dossier

est grossièrement divisé en deux types : 1) Écrivez le fichier package.json, qui est écrit dans le répertoire racine. du projet, Sa forme est la suivante :

{ "name" : "some-library",
 "main" : "./lib/some-library.js" }

Le require('./some-library') écrit ainsi est vraiment

require('./some-library/lib/some-library.js')

2) Acceptez directement de charger le fichier index.js ou index.node, le même que celui requis, le chargement peut être le suivant :

./ some-library/index.js
./some-library/index.node

Mise en cache

Plusieurs références à un module entraîneront un seul chargement. Tout comme la modification de mot-clé statique en Java. Cependant, il est à noter que lorsque vous utilisez require('foo') dans ce formulaire, il n'est pas forcément garanti que le même fichier sera référencé à chaque fois (car vous pouvez le référencer dans des dossiers différents).

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Apprentissage du module cluster dans Node

Introduction à l'utilisation d'Angular avec Node.js

À propos de la méthode node.js de lecture et d'écriture de fichiers et répertoires système basée sur le module fs

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