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()
ouimport
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
ouhttp
). - Si ce n'est pas le cas, il cherche ensuite dans le dossier
node_modules
. Si plusieursnode_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.
- 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_modules
de votre projet. - Globales : Si vous installez un paquet avec l'option
-g
(globale), il ne sera pas stocké dans lenode_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.
- Locales : Lorsque vous installez un paquet sans l'option
Le fichier
package.json
:- Bien que le dossier
node_modules
contienne les modules physiques, le fichierpackage.json
de 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 install
dans un projet ayant unpackage.json
correctement 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_modules
peuvent 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 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.