Appearance
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?
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 dossiernode_modules.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.
- Si le module que vous installez a ses propres dépendances, il aura aussi son propre dossier
Recherche de Modules : Lorsque vous utilisez
require()ouimportdans 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
fsouhttp). - Si ce n'est pas le cas, il cherche ensuite dans le dossier
node_modules. Si plusieursnode_modulesexistent (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.
- Il vérifie d'abord si c'est un module noyau (fourni par Node.js lui-même, comme
Dépendances Locales et Globales :
- Locales : Lorsque vous installez un paquet sans l'option
-g, il est installé localement et apparaît dansnode_modulesde votre projet. - Globales : Si vous installez un paquet avec l'option
-g(globale), il ne sera pas stocké dans lenode_modulesde 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.
- Locales : Lorsque vous installez un paquet sans l'option
Le fichier
package.json:- Bien que le dossier
node_modulescontienne les modules physiques, le fichierpackage.jsonde votre projet garde la trace des dépendances que votre projet utilise. Si vous supprimez votre dossiernode_modules, vous pouvez toujours le régénérer en exécutantnpm installdans un projet ayant unpackage.jsoncorrectement configuré.
- Bien que le dossier
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?
- Taille : Le dossier peut être très volumineux et contient beaucoup de fichiers.
- Portabilité : La structure exacte et les binaires de
node_modulespeuvent différer selon les systèmes, ce qui pourrait causer des problèmes. - Dépendance du
package.json: Tant que vous avez votrepackage.jsonà jour, n'importe qui peut cloner votre projet et exécuternpm installpour obtenir toutes les dépendances nécessaires.
Par conséquent, ajoutez node_modules/ à votre fichier .gitignore pour éviter de le suivre dans Git.