Maison interface Web js tutoriel Introduction détaillée au mécanisme d'installation des modules de npm

Introduction détaillée au mécanisme d'installation des modules de npm

Jun 26, 2017 am 10:54 AM
安装 机制 模块 详解

La structure logique de la surface de l'arbre de dépendances et la structure physique réelle de l'arbre de dépendances
La surface de l'arbre de dépendances La structure logique n'est pas nécessairement la même que la structure physique réelle de l'arbre de dépendances !
Deux commandes doivent être mentionnées en premier : tree -d (linux) et npm ls (npm)
Sous un projet npm :
commande tree -dRépertorie les structures physiques de toutes les dépendances d'un projet dans un diagramme arborescent
Commande npm lsRépertorie la structure logique de toutes les dépendances sous un projet dans un diagramme arborescent
Prenons l'exemple du document officiel :
L'exemple de projet 1 a deux modules dépendants : le module mod-a et le module mod-c
Le module mod-a a un module dépendant mod-b@1.0.0 module
Le module mod-c a un module dépendant mod-b@2.0.0 Les résultats du module
tree -d et npm ls sont les suivants : (notez que la version npm est npm3 au lieu de npm2)
Regardez d'abord le résultat de la case rouge ci-dessous. Cela devrait être le résultat le plus cohérent pour <.> Nous comprenons l'arbre de dépendances de ". Tout d'abord, la dépendance de premier niveau est formée sous le projet - module mod-a et module mod-b. Ensuite, ces deux modules sont utilisés comme modules parents et le module de deuxième niveau le module de dépendances mod-b@1.0 est ajouté .0 et mod-b@2.0.0
Mais !
Ce n'est pas à quoi ressemble l'arbre de dépendances physiquement formé. L'arbre de dépendances physiquement formé est la boîte rouge ci-dessus. mod-a, mod-c et mod-b sont en fait des dépendances du même niveau .
Vous vous demandez peut-être :
Pourquoi un tel arbre de dépendances est-il formé ? Laissez-moi vous expliquer ci-dessous
[Remarque] : Les illustrations suivantes sont toutes des structures physiques d'arbres de dépendances plutôt qu'un arbre de dépendance. structure logique
Une petite supposition sur le mécanisme d'installation du module npm
Lors de l'installation d'un module, il existe deux manières possibles :
Installation horizontale ou Installation imbriquée (voici juste des conjectures et hypothèses)

La méthode d'installation peut-elle être complètement horizontale ? ——
Impossible
Prenons un exemple similaire à celui ci-dessus : il y a deux modules dépendants A et B sous le projet APP ; A a un module dépendant Cv1.0 et B a également un module dépendant Cv2.0 ; Évidemment, ils ne peuvent pas exister sous les mêmes node_modules en même temps. Lors de l'installation, en raison du mécanisme de npm, une seule version du module dépendant peut être installée, l'une d'elles écrasera l'autre.

Mais si nous installons seulement une version du module dépendant du C, cela peut donner lieu au module A et Le module B n'est pas compatible
Pour les raisons ci-dessus, npm2 a choisi la méthode d'installation imbriquée -
Mécanisme d'installation du module sous npm2
npm2 installe des modules de dépendances à plusieurs niveaux en utilisant une méthode d'installation imbriquée :
Avantages et inconvénients
Avantages : Résolu la version unique Atteindre la compatibilité multi-versions
Inconvénients : peut provoquer une grande redondance du même module est le suivant suit :
En prenant l'exemple ci-dessus comme exemple, la situation suivante est également raisonnable :
Je sais par sentiment que ce n'est en aucun cas un bon phénomène, alors comment pouvons-nous réduire ce type de redondance de modules tout en obtenant une compatibilité multi-version entre les dépendances ? Npm3 a donc apporté quelques améliorations
Le mécanisme d'installation du module sous npm3 :
La différence entre npm3 et npm2 se reflète principalement dans l'installation des modules secondaires :
npm3 "essaiera de" Logiquement, les modules d'un certain niveau sont placés au premier niveau du projet en termes de structure physique "Tous"
1. . Lors de l'installation d'un certain module de deuxième niveau, si le premier niveau
Il n'y a pas de module du même nom , alors mettez ce module de deuxième niveau. au premier niveau 2. Lors de l'installation Lorsqu'un module de deuxième niveau est trouvé, si le premier niveau est trouvé avoir le même nom et la même version du module
, puis directement Réutiliser ce module Lors de l'installation d'une certaine seconde- module de niveau, si le premier niveau est trouvé a le même nom mais des versions différentes de modules , donc
ne peut être imbriqué que sous son propre module parent
Cela peut être un peu difficile à comprendre au début, alors regardons les photos et parlons !
Permettez-moi de commencer par 1 : lors de l'installation d'un certain module de deuxième niveau, si vous constatez que le le module de premier niveau n'a pas été Pour les modules du même nom, placez ce module de deuxième niveau au premier niveau
Simplifions d'abord l'exemple ci-dessus : maintenant il n'y en a qu'un sous le projet APP Le module dépendant de premier niveau A a un module dépendant de deuxième niveau C en dessous, mais lors de l'installation de npm, le module dépendant

Le module de deuxième niveau (C v1.0) dans npm3, lorsqu'il n'y a pas de module du même nom dans le répertoire de premier niveau (node_modules) du projet, sera installé dans le répertoire de premier niveau, suivant ainsi son module parent A Même niveau. C'est la raison pour laquelle la structure logique et la structure physique de l'arbre de dépendances au début de cet article sont différentes .
En d'autres termes :
Dans npm2, Le la structure logique de l'arbre de dépendances est la même que sa structure physique
Dans npm3, la structure logique de l'arbre de dépendances est la même comme sa structure physique. Différent
Autre 2 : Lors de l'installation d'un certain module secondaire, si le premier Pour les modules du même nom et de même version au niveau, on peut directement réutiliser ce module
Sur sur la base de 1, nous rétablissons l'exemple de 1 au scénario précédent plus compliqué : il y a deux modules dépendants A et B sous le projet APP ; A a un module dépendant Cv1.0 et B a également un module dépendant C v1 ; .0 (deux C La version du module est la même)

Pour npm2, les deux Les packages C sont les mêmes, provoquant la redondance du module
Dans npm3, car le module C sous le module A est installé au premier niveau, cela permet au module B d'être réutilisé au même niveau ; et le nom, la version, Tous les mêmes modules C
npm3 utilise cette méthode pour résoudre partiellement les points douloureux (partiellement) de npm2
[Transition de 1, 2 à 3] J'ai dit au début de cette section : "npm3 fera de son mieux" logiquement "Tous" les modules de niveau sont placés dans le premier niveau du projet", Je pense que vous devriez comprendre un peu après avoir lu 1 et 2 "faites de votre mieux" Oui , mais j'ai dit "faites de votre mieux" , ce qui signifie également que npm3 ne peut pas placer de dépendances de deuxième niveau sur le premier niveau . Pour cela, veuillez consulter 3 :
Enfin, 3 : Lors de l'installation d'un certain module secondaire, si le deuxième module avec le même nom mais des versions différentes à un même niveau ne peuvent être imbriquées que sous leur propre module parent
En 2, les deux modules C dont dépendent A et B sont les mêmes, Mais que se passe-t-il si les versions des deux modules C sont différentes ? , la situation d'installation du projet npm est la suivante :

dans npm3, car B et A require Les modules dépendants sont différents (l'exigence sous B est C de la v1.0, et l'exigence sous A est C de la v2.0), donc B ne peut pas réutiliser le module C v1.0 sous A comme dans 2
(Voyant cela, je pense que cela devrait répondre à vos doutes sur l'exemple du début de l'article. Cet exemple est presque exactement le même que cet exemple)
En voyant cela, vous avez une compréhension générale du mécanisme de fonctionnement des modules sous npm2 et npm3, ainsi que de l'optimisation de npm3 pour npm2, mais s'il vous plaît réfléchissez à cette Question : npm3 a-t-il optimisé à l'extrême les défauts de redondance des modules de npm2 ? ———La réponse est Non , veuillez lire ci-dessous :
En fait : La redondance des modules peut encore se produire dans npm3, car il y a déjà un module C v1.0 dans le répertoire de premier niveau, Donc toutes les v2.0 ne peuvent être installées qu'en tant que modules de dépendance secondaires, vous verrez donc la situation suivante

Et dans le cas particulier montré dans l'image ci-dessus, il ne semble y avoir aucune différence entre npm3 et npm2
【Transition】Alors, y a-t-il une solution à cela ? Bien sûr, lorsque le module C v1.0 sous le module A est mis à jour vers C v2.0, nous pouvons "rediriger" tous les modules dépendants secondaires C v2.0 vers C v2.0 via la déduplication npm du C v1. .0 dans le répertoire de premier niveau
Utilisez la déduplication npm pour supprimer les modules redondants :
Qu'a fait la déduplication npm ? Il peut "rediriger" tous les modules dépendants redondants de deuxième niveau qui peuvent être supprimés vers des modules de premier niveau portant le même nom/version

Références Document officiel npm Section 2 (comment fonctionne npm) :
[Rappel chaleureux] : aucun blog populaire ne peut se comparer à un livre lourd et à un document ennuyeux
【Fin】
Rappelez-vous 10 petits mots chaque jour, l'important c'est Accumuler !
mémoire : mémoire Dépendance : contraintes de dépendance : contraintes déployer : paramètre de déploiement : paramètre portée : portée
écosystèmes : préfixe de l'écosystème : préfixe Prior : priorité/avant révocation : révocation
 

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 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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

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)

Solution au problème selon lequel le pack de langue chinoise ne peut pas être installé sur le système Win11 Solution au problème selon lequel le pack de langue chinoise ne peut pas être installé sur le système Win11 Mar 09, 2024 am 09:48 AM

Solution au problème selon lequel le système Win11 ne peut pas installer le pack de langue chinoise Avec le lancement du système Windows 11, de nombreux utilisateurs ont commencé à mettre à niveau leur système d'exploitation pour découvrir de nouvelles fonctions et interfaces. Cependant, certains utilisateurs ont constaté qu'ils ne parvenaient pas à installer le pack de langue chinoise après la mise à niveau, ce qui perturbait leur expérience. Dans cet article, nous discuterons des raisons pour lesquelles le système Win11 ne peut pas installer le pack de langue chinoise et proposerons des solutions pour aider les utilisateurs à résoudre ce problème. Analyse des causes Tout d'abord, analysons l'incapacité du système Win11 à

Impossible d'installer les ajouts d'invités dans VirtualBox Impossible d'installer les ajouts d'invités dans VirtualBox Mar 10, 2024 am 09:34 AM

Vous ne pourrez peut-être pas installer des ajouts d'invités sur une machine virtuelle dans OracleVirtualBox. Lorsque nous cliquons sur Périphériques> InstallGuestAdditionsCDImage, cela renvoie simplement une erreur comme indiqué ci-dessous : VirtualBox - Erreur : Impossible d'insérer le disque virtuel C : Programmation de fichiersOracleVirtualBoxVBoxGuestAdditions.iso dans la machine Ubuntu Dans cet article, nous comprendrons ce qui se passe lorsque vous Que faire lorsque vous Je ne peux pas installer les ajouts d'invités dans VirtualBox. Impossible d'installer les ajouts d'invités dans VirtualBox Si vous ne pouvez pas l'installer dans Virtua

Que dois-je faire si Baidu Netdisk est téléchargé avec succès mais ne peut pas être installé ? Que dois-je faire si Baidu Netdisk est téléchargé avec succès mais ne peut pas être installé ? Mar 13, 2024 pm 10:22 PM

Si vous avez téléchargé avec succès le fichier d'installation de Baidu Netdisk, mais que vous ne parvenez pas à l'installer normalement, il se peut qu'il y ait une erreur dans l'intégrité du fichier du logiciel ou qu'il y ait un problème avec les fichiers résiduels et les entrées de registre. prenons-en soin pour les utilisateurs. Présentons l'analyse du problème selon lequel Baidu Netdisk est téléchargé avec succès mais ne peut pas être installé. Analyse du problème du téléchargement réussi de Baidu Netdisk mais qui n'a pas pu être installé 1. Vérifiez l'intégrité du fichier d'installation : Assurez-vous que le fichier d'installation téléchargé est complet et n'est pas endommagé. Vous pouvez le télécharger à nouveau ou essayer de télécharger le fichier d'installation à partir d'une autre source fiable. 2. Désactivez le logiciel antivirus et le pare-feu : Certains logiciels antivirus ou pare-feu peuvent empêcher le bon fonctionnement du programme d'installation. Essayez de désactiver ou de quitter le logiciel antivirus et le pare-feu, puis réexécutez l'installation.

Comment installer des applications Android sur Linux ? Comment installer des applications Android sur Linux ? Mar 19, 2024 am 11:15 AM

L'installation d'applications Android sur Linux a toujours été une préoccupation pour de nombreux utilisateurs. Surtout pour les utilisateurs Linux qui aiment utiliser des applications Android, il est très important de maîtriser comment installer des applications Android sur les systèmes Linux. Bien qu'exécuter des applications Android directement sur Linux ne soit pas aussi simple que sur la plateforme Android, en utilisant des émulateurs ou des outils tiers, nous pouvons toujours profiter avec plaisir des applications Android sur Linux. Ce qui suit explique comment installer des applications Android sur les systèmes Linux.

Explication détaillée du fonctionnement de la division dans Oracle SQL Explication détaillée du fonctionnement de la division dans Oracle SQL Mar 10, 2024 am 09:51 AM

Explication détaillée de l'opération de division dans OracleSQL Dans OracleSQL, l'opération de division est une opération mathématique courante et importante, utilisée pour calculer le résultat de la division de deux nombres. La division est souvent utilisée dans les requêtes de bases de données. Comprendre le fonctionnement de la division et son utilisation dans OracleSQL est donc l'une des compétences essentielles des développeurs de bases de données. Cet article discutera en détail des connaissances pertinentes sur les opérations de division dans OracleSQL et fournira des exemples de code spécifiques pour référence aux lecteurs. 1. Opération de division dans OracleSQL

Comment installer Podman sur Ubuntu 24.04 Comment installer Podman sur Ubuntu 24.04 Mar 22, 2024 am 11:26 AM

Si vous avez utilisé Docker, vous devez comprendre les démons, les conteneurs et leurs fonctions. Un démon est un service qui s'exécute en arrière-plan lorsqu'un conteneur est déjà utilisé dans n'importe quel système. Podman est un outil de gestion gratuit permettant de gérer et de créer des conteneurs sans recourir à un démon tel que Docker. Par conséquent, il présente des avantages dans la gestion des conteneurs sans nécessiter de services backend à long terme. De plus, Podman ne nécessite pas d'autorisations au niveau racine pour être utilisé. Ce guide explique en détail comment installer Podman sur Ubuntu24. Pour mettre à jour le système, nous devons d'abord mettre à jour le système et ouvrir le shell du terminal d'Ubuntu24. Pendant les processus d’installation et de mise à niveau, nous devons utiliser la ligne de commande. un simple

Mar 22, 2024 pm 04:40 PM

Durant leurs études au lycée, certains élèves prennent des notes très claires et précises, prenant plus de notes que d’autres dans la même classe. Pour certains, prendre des notes est un passe-temps, tandis que pour d’autres, c’est une nécessité lorsqu’ils oublient facilement de petites informations sur quelque chose d’important. L'application NTFS de Microsoft est particulièrement utile pour les étudiants qui souhaitent sauvegarder des notes importantes au-delà des cours réguliers. Dans cet article, nous décrirons l'installation des applications Ubuntu sur Ubuntu24. Mise à jour du système Ubuntu Avant d'installer le programme d'installation d'Ubuntu, sur Ubuntu24, nous devons nous assurer que le système nouvellement configuré a été mis à jour. Nous pouvons utiliser le "a" le plus célèbre du système Ubuntu

Étapes détaillées pour installer le langage Go sur un ordinateur Win7 Étapes détaillées pour installer le langage Go sur un ordinateur Win7 Mar 27, 2024 pm 02:00 PM

Étapes détaillées pour installer le langage Go sur un ordinateur Win7 Go (également connu sous le nom de Golang) est un langage de programmation open source développé par Google. Il est simple, efficace et offre d'excellentes performances de concurrence. Il convient au développement de services cloud, d'applications réseau et. systèmes back-end. Installer le langage Go sur un ordinateur Win7 permet de prendre rapidement en main le langage et de commencer à écrire des programmes Go. Ce qui suit présentera en détail les étapes pour installer le langage Go sur un ordinateur Win7 et joindra des exemples de code spécifiques. Étape 1 : Téléchargez le package d'installation du langage Go et visitez le site officiel de Go

See all articles