Maison  >  Article  >  interface Web  >  Analyse du déploiement de code basé sur les modules et les packages Node.js method_node.js

Analyse du déploiement de code basé sur les modules et les packages Node.js method_node.js

WBOY
WBOYoriginal
2016-05-16 15:15:221196parcourir

Règles de résolution du chemin du module

Les programmeurs C expérimentés commencent par le fichier make lorsqu'ils écrivent un nouveau programme. De même, avant d'utiliser NodeJS pour écrire un programme, afin de bien démarrer, vous devez d'abord préparer la structure des répertoires et la méthode de déploiement du code, tout comme construire un échafaudage lors de la réparation d'une maison. Ce chapitre présentera diverses connaissances connexes.

Règles de résolution du chemin du module
Nous savons déjà que la fonction require prend en charge les chemins absolus commençant par une barre oblique (/) ou une lettre de lecteur (C:), et prend également en charge les chemins relatifs commençant par ./. Cependant, ces deux chemins établissent une forte relation de couplage entre les modules. Une fois que l'emplacement de stockage d'un fichier de module doit être modifié, le code des autres modules qui utilisent ce module doit également être ajusté en conséquence, ce qui devient un problème. Par conséquent, la fonction require prend en charge la troisième forme de chemin, écrite de la même manière que foo/bar, et analyse le chemin selon les règles suivantes jusqu'à ce que l'emplacement du module soit trouvé.

Modules intégrés

Si le nom passé à la fonction require est un nom de module intégré NodeJS, l'analyse du chemin ne sera pas effectuée et l'objet exporté du module interne sera renvoyé directement, comme require('fs').

répertoire node_modules

NodeJS définit un répertoire spécial node_modules pour stocker les modules. Par exemple, le chemin absolu d'un module est /home/user/hello.js Lorsque la méthode require('foo/bar') est utilisée pour charger le module dans le module, NodeJS essaiera d'utiliser les chemins suivants dans l'ordre. .

 /home/user/node_modules/foo/bar
 /home/node_modules/foo/bar
 /node_modules/foo/bar

Variable d'environnement NODE_PATH

Semblable à la variable d'environnement PATH, NodeJS permet de spécifier des chemins de recherche de modules supplémentaires via la variable d'environnement NODE_PATH. La variable d'environnement NODE_PATH contient un ou plusieurs chemins de répertoires. Les chemins sont séparés par : sous Linux et sous Windows. Par exemple, la variable d'environnement NODE_PATH suivante est définie :

NODE_PATH=/home/user/lib:/home/lib
Lors de l'utilisation de require('foo/bar') pour charger un module, NodeJS essaie les chemins suivants dans l'ordre.

 /home/user/lib/foo/bar
 /home/lib/foo/bar

Pack

Nous savons déjà que l'unité de base d'un module JS est un seul fichier JS, mais les modules plus complexes sont souvent composés de plusieurs sous-modules. Afin de faciliter la gestion et l'utilisation, nous pouvons appeler un gros module composé de plusieurs sous-modules un package, et mettre tous les sous-modules dans le même répertoire.

Parmi tous les sous-modules qui composent un package, il doit y avoir un module d'entrée, et l'objet d'exportation du module d'entrée est utilisé comme objet d'exportation du package. Par exemple, il existe la structure de répertoires suivante.

- /home/user/lib/
  - cat/
    head.js
    body.js
    main.js

Le répertoire cat définit un package, qui contient 3 sous-modules. main.js sert de module d'entrée et son contenu est le suivant :

var head = require('./head');
var body = require('./body');

exports.create = function (name) {
  return {
    name: name,
    head: head.create(),
    body: body.create()
  };
};

Lors de l'utilisation d'un package dans d'autres modules, vous devez charger le module d'entrée du package. En continuant avec l'exemple ci-dessus, l'utilisation de require('/home/user/lib/cat/main') peut atteindre l'objectif, mais cela ne semble pas être une bonne idée si le nom du module d'entrée apparaît dans le chemin. Nous devons donc faire un peu de travail supplémentaire pour que le package se comporte davantage comme un module unique.

index.js
Lorsque le nom de fichier du module est index.js, lors du chargement du module, vous pouvez utiliser le chemin du répertoire où se trouve le module au lieu du chemin du fichier du module. Par conséquent, en suivant l'exemple ci-dessus, les deux suivants. les déclarations sont équivalentes.

var cat = require('/home/user/lib/cat');
var cat = require('/home/user/lib/cat/index');

Après un traitement de cette manière, il vous suffit de transmettre le chemin du répertoire du package à la fonction require. On a l'impression que le répertoire entier est utilisé comme un seul module, ce qui donne une impression plus holistique.

package.json
Si vous souhaitez personnaliser le nom de fichier et l'emplacement de stockage du module d'entrée, vous devez inclure un fichier package.json dans le répertoire du package et y spécifier le chemin du module d'entrée. Le module cat dans l'exemple ci-dessus peut être refactorisé comme suit.

- /home/user/lib/
  - cat/
    + doc/
    - lib/
      head.js
      body.js
      main.js
    + tests/
    package.json

Le contenu de package.json est le suivant.

{
  "name": "cat",
  "main": "./lib/main.js"
}

De cette façon, vous pouvez également utiliser require('/home/user/lib/cat') pour charger le module. NodeJS trouvera l'emplacement du module d'entrée en fonction de package.json dans le répertoire du package.

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