Maison  >  Article  >  interface Web  >  Compréhension approfondie du mécanisme du NMP

Compréhension approfondie du mécanisme du NMP

不言
不言avant
2019-03-29 10:00:421826parcourir

Cet article vous apporte une compréhension approfondie du mécanisme NPM. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Lors de l'utilisation de NPM pour l'installation, des conflits de packages se produisent souvent (tels que des versions incohérentes des sous-modules de plusieurs modules principaux, etc.), entraînant divers problèmes majeurs ou mineurs au cours du processus de développement. Tous les contenus suivants seront présentés ici :

  1. Méthode d'installation principale NPM
  2. Requête d'informations sur le package NPM
  3. Mécanisme d'installation NPM (principal)

Commandes d'installation et de requête

NPM diverses méthodes d'installation

  • npm install packageName[@next | @versionNumber]

    • dans node_modules Installer lorsqu'aucun module n'est spécifié, (ne pas vérifier le répertoire ~/.npm)
  • npm install packageName --f | -- force

    • Un module n'a pas d'importance si il a été installé ou non, npm Tous sont requis Forcer la réinstallation
  • npm update packageName

    • Si la version distante est plus récent ou la version locale n'existe pas Installer

Service de requête NPM

  • NPM utilise le service de requête de registre pour connaître la dernière version de chaque module.
  • Vous pouvez interroger les informations du module de cartographie via le npm view packageName [version]

Mécanisme d'installation NPM

Après avoir entré la commande npm install et appuyé sur Entrée, vous irez à travers les étapes suivantes (en prenant npm 5.5.1 comme exemple) :

1. Exécuter la préinstallation du projet lui-même

Si le hook de préinstallation est défini dans le projet npm actuel, il sera exécuté à ce moment-là.

2. Déterminez le module de dépendance de premier niveau

La première chose que vous devez faire est de déterminer la dépendance de premier niveau dans le projet, c'est-à-dire directement dans les attributs dependencies et devDependencies Le module spécifié (en supposant qu'aucun paramètre d'installation npm ne soit ajouté pour le moment).

Le projet lui-même est le nœud racine de l'ensemble de l'arborescence des dépendances. Chaque module de dépendance de premier niveau est un sous-arbre sous le nœud racine. Npm démarrera plusieurs processus à partir de chaque dépendance de premier niveau. Le module commence progressivement à rechercher des nœuds plus profonds.

Si le module spécifié existe déjà dans le répertoire node_modules de la requête, il ne sera pas réinstallé

3 Récupérer le module

Récupérer le module. a Le processus récursif est divisé en les étapes suivantes :

  • Obtenir des informations sur le module

    • Avant de télécharger un module, vous devez d'abord déterminer sa version. En effet, package.json est souvent une version sémantique (semver, version sémantique)
    • À l'heure actuelle, s'il y a les informations du module dans le fichier de description de la version (npm-shrinkwrap.json ou package- lock.json), récupérez-le directement
    • Sinon, récupérez-le depuis l'entrepôt (requête au registre). Par exemple, la version d'un package dans packaeg.json est ^1.1.0, npm se rendra à l'entrepôt pour obtenir la dernière version conforme au format 1.x.x.
  • Obtenir l'entité du module.

    • L'étape précédente obtiendra l'adresse du package compressé du module (champ résolu). npm utilisera cette adresse pour vérifier le cache local. Si elle est dans le cache, elle sera prise directement. Sinon, il sera téléchargé depuis l'entrepôt.
  • Recherchez les dépendances de ce module

    • S'il y a des dépendances, revenez à l'étape 1, sinon arrêtez.

4. Aplatissement du module (déduplication)

Ce qui est obtenu en une seule étape est un arbre de dépendances complet, qui peut inclure des lots. de modules répétitifs. Par exemple, le module A dépend deloadsh et le module B dépend également de lodash. Avant npm3, l'installation était strictement basée sur la structure arborescente des dépendances, ce qui entraînait une redondance des modules.

Un processus de déduplication est ajouté par défaut à partir de npm3 版本. Il traversera tous les nœuds et placera les modules un par un sous le nœud racine, qui est le premier niveau de nœuds-modules. Lorsque des modules en double sont trouvés, ils sont supprimés.

Ici, vous devez définir un module en double, qui fait référence à le nom du module est le même et le semver est compatible. Chaque semver correspond à une plage de versions autorisées. Si les plages de versions autorisées de deux modules se chevauchent, une version compatible peut être obtenue sans avoir besoin d'avoir exactement le même numéro de version. Cela permet de supprimer davantage de modules redondants lors du processus de déduplication.

Par exemple,

  • sous node-modules, le module foo dépend de lodash@^1.0.0, et le module bar dépend de lodash@^1.1.0, puis ^ 1.1.0 est la version compatible.
  • Quand foo dépend de lodash@^2.0.0 et bar dépend de lodash@^1.1.0, selon les règles de Semver, il n'y a pas de version compatible entre eux. Une version sera placée dans node_modules et l'autre restera dans l'arborescence des dépendances.

Par exemple, supposons qu'un arbre de dépendances ressemble à l'origine à ceci :

node_modules
-- foo
---- lodash@version1

-- bar
---- lodash@version2

En supposant que la version1 et la version2 sont des versions compatibles, après la déduplication, cela deviendra la forme suivante :

node_modules
-- foo

-- bar

-- lodash (la version retenue est la version compatible)

En supposant que la version1 et la version2 sont des versions incompatibles, les versions ultérieures sont conservées dans la dépendance arbre :

node_modules
-- foo
-- lodash@version1

-- bar
---- lodash@version2

5 . Installer le module

Cette étape mettra à jour node_modules dans le projet et exécutera les fonctions de cycle de vie dans le module (dans l'ordre de préinstallation, installation, postinstallation).

6. Exécuter le propre cycle de vie du projet

Si le projet npm actuel a un hook défini, il sera exécuté à ce moment (dans l'ordre d'installation, postinstallation, prépublication et préparation).

La dernière étape consiste à générer ou à mettre à jour le fichier de description de version, et le processus d'installation de npm est terminé.

Cet article est terminé ici. Pour un contenu plus passionnant, vous pouvez faire attention à la colonne Tutoriel vidéo JavaScript du site Web PHP chinois !

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer