Skip to content

Qu'est-ce que node_modules?

Lorsque vous travaillez sur un projet Node.js et que vous installez des dépendances via npm (ou un autre gestionnaire de paquets comme yarn), ces dépendances sont stockées dans un dossier appelé node_modules.

Comment fonctionne node_modules?

  1. Installation de Modules : Lorsque vous exécutez la commande npm install <module_name>, npm cherche le module demandé dans le registre npm, le télécharge et le stocke dans le dossier node_modules.

  2. Structure Hiérarchique :

    • Si le module que vous installez a ses propres dépendances, il aura aussi son propre dossier node_modules à l'intérieur, et ainsi de suite. Cela peut parfois entraîner une structure de dossiers très profonde.
    • Cependant, à partir de npm version 3, le gestionnaire de paquets essaie de garder la structure aussi plate que possible en évitant la répétition des modules. Si deux modules dépendent du même sous-module, npm essaiera de le placer au niveau supérieur, plutôt que de le répéter pour chaque module.
  3. Recherche de Modules : Lorsque vous utilisez require() ou import dans votre code pour charger un module, Node.js suit un ordre spécifique pour trouver le module :

    • Il vérifie d'abord si c'est un module noyau (fourni par Node.js lui-même, comme fs ou http).
    • Si ce n'est pas le cas, il cherche ensuite dans le dossier node_modules. Si plusieurs node_modules existent (en raison de la structure hiérarchique), Node recherche depuis le répertoire courant et remonte dans la hiérarchie jusqu'à ce qu'il trouve le module ou atteigne la racine.
  4. Dépendances Locales et Globales :

    • Locales : Lorsque vous installez un paquet sans l'option -g, il est installé localement et apparaît dans node_modules de votre projet.
    • Globales : Si vous installez un paquet avec l'option -g (globale), il ne sera pas stocké dans le node_modules de votre projet, mais dans un emplacement global sur votre système. C'est typique pour les outils CLI que vous pourriez vouloir utiliser dans plusieurs projets.
  5. Le fichier package.json :

    • Bien que le dossier node_modules contienne les modules physiques, le fichier package.json de votre projet garde la trace des dépendances que votre projet utilise. Si vous supprimez votre dossier node_modules, vous pouvez toujours le régénérer en exécutant npm install dans un projet ayant un package.json correctement configuré.

Pourquoi ne pas traquer node_modules dans Git?

Il est fortement recommandé de ne pas inclure node_modules dans votre dépôt git (ou d'autres systèmes de contrôle de version). Pourquoi?

  1. Taille : Le dossier peut être très volumineux et contient beaucoup de fichiers.
  2. Portabilité : La structure exacte et les binaires de node_modules peuvent différer selon les systèmes, ce qui pourrait causer des problèmes.
  3. Dépendance du package.json : Tant que vous avez votre package.json à jour, n'importe qui peut cloner votre projet et exécuter npm install pour obtenir toutes les dépendances nécessaires.

Par conséquent, ajoutez node_modules/ à votre fichier .gitignore pour éviter de le suivre dans Git.