Question 1Quand tu tapes npm install react dans le dossier my-app, où va le paquet récupéré ?
La gestion de paquets — ce que npm install installe, et où
Cet article fait partie du cours Les bases de l'informatique, qui construit depuis zéro les connaissances informatiques pratiques indispensables pour programmer et faire du vibe coding.
Quand tu tapes npm install react, un dossier node_modules apparaît dans my-app et une ligne s'ajoute à package.json. Les schémas suivent tout ce que déclenche cette seule ligne.
Cet article traite de la gestion de paquets.
C'est le mécanisme qui récupère une bibliothèque externe par son nom avec une seule ligne, comme npm install, et la place à un endroit défini.
Tu ne tapes que la ligne de gauche, et ce sont les deux éléments de droite qui s'ajoutent.
Seuls le dossier node_modules et une ligne de package.json s'ajoutent ; le fichier app.js que tu as écrit ne change pas d'un caractère.
Ce qu'est un paquet — une bibliothèque externe que tu récupères par son nom
Une bibliothèque externe rassemblée sous une forme récupérable par son nom est un paquet (package ; bibliothèque externe mise sous une forme que l'on récupère en indiquant son nom), et le numéro qui désigne son contenu à un instant donné est la version (version).
Pour afficher les dates de façon lisible dans l'application de réservation my-app, tu peux écrire ce traitement toi-même, mais il est aussi distribué sous forme de paquet.
À gauche, toutes les lignes écrites t'appartiennent ; à droite, tu te contentes d'appeler en une ligne ce que tu as récupéré.
- La chaîne que tu indiques au moment de le récupérer
- Désigne une seule chose dans le registre
- Un nouveau numéro s'ajoute à chaque révision
- Les anciens numéros restent disponibles
- Le programme lui-même, qui s'exécute quand on l'appelle
- Tu ne les modifies pas toi-même
- Ce qui manque à react pour fonctionner est listé ici
- Ils viennent avec au moment de la récupération
Ce que tu indiques au moment de récupérer, c'est seulement le nom tout en haut.
Ce sont « les noms des autres paquets dont il a besoin », tout en bas, qui feront augmenter le nombre de dossiers.
Un paquet est une bibliothèque externe que l'on récupère par son nom
Un paquet, c'est un programme écrit par quelqu'un d'autre, nommé et mis sous une forme distribuable.
Indiquer le nom suffit à faire venir son contenu sur ton ordinateur, et la version est le numéro qui distingue les révisions portant le même nom.
Ce qui apparaît dans my-app quand tu tapes npm install react
Ce qui récupère par le nom, c'est le gestionnaire de paquets (package manager ; programme qui récupère les paquets et les place à un endroit défini), et celui de JavaScript est npm.
Les deux commandes tiennent chacune sur une seule ligne dans le terminal, et supposent toutes deux que tu les tapes à l'intérieur de my-app.
# Se placer d'abord dans le dossier my-app
cd my-app
# Récupérer un paquet portant le nom react
npm install react
# Récupérer d'un coup tous les noms listés dans le fichier manifeste
npm install
Les paquets récupérés vont dans node_modules (dossier que npm crée dans my-app pour y placer les paquets récupérés).
- app.js — le code source du traitement des réservations
- package.json — le fichier qui liste les noms à récupérer
- Le code source du paquet récupéré
- C'est ce contenu que tu appelles
- Un dossier est créé par nom
- S'il n'a besoin de rien, il n'y en a aucun
Les fichiers que tu écris et le dossier que npm crée sont séparés à l'intérieur du même my-app.
Pour une même ligne, le résultat change selon la façon de la taper et selon les fautes dans le nom.
| La ligne tapée | Ce que fait npm | Résultat dans my-app |
|---|---|---|
| npm install react | Récupère ce nom et ses dépendances | Des dossiers apparaissent dans node_modules |
| npm install | Récupère d'un coup tous les noms de package.json | node_modules est créé en entier |
| npm install reactttt | Cherche et ne trouve pas | 404 Not Found, rien ne s'ajoute |
Comme à la troisième ligne, si un nom mal tapé n'existe pas dans le registre, rien n'est installé.
Si un nom mal tapé existe par hasard, c'est autre chose qui s'installe : copie les noms depuis la page officielle.
Les paquets dont react a besoin, puis ceux dont ces derniers ont besoin, arrivent tous ensemble.
Ne pas avoir à chercher soi-même cet ensemble et à le récupérer un par un, c'est la raison d'utiliser un gestionnaire de paquets.
Récupérer un seul paquet ne veut pas dire qu'un seul dossier apparaît dans node_modules.
Le registre est un autre ordinateur, de l'autre côté d'Internet.
Le seul endroit où sont placés les paquets récupérés, c'est node_modules, dans le dossier my-app.
Le fichier app.js que tu as écrit appelle les paquets qui s'y trouvent et les utilise.
Ce que tu récupères va dans node_modules
Ce que tu récupères va dans le dossier node_modules créé à l'intérieur de my-app.
Le fichier app.js que tu as écrit ne change pas, et il y a plus de dossiers que de noms indiqués parce que ce dont le paquet récupéré a besoin arrive aussi.
package.json — le fichier manifeste où sont listés les noms des paquets récupérés
Le contenu de node_modules est créé par npm, et tu ne le modifies pas toi-même.
La seule chose que tu gères, c'est un unique fichier où sont listés les noms récupérés.
C'est le fichier manifeste (package.json en JavaScript ; fichier où sont inscrits les noms des paquets nécessaires au fonctionnement de l'application), et chacun des noms qui y figurent s'appelle une dépendance (dependency ; paquet nécessaire au fonctionnement de ton propre code).
{
"name": "my-app",
"dependencies": {
"react": "^19.0.0",
"express": "^5.1.0"
}
}
Les deux entrées listées sous dependencies sont les dépendances de ce my-app.
À droite figure la version à récupérer ; les numéros servent à cet exemple, et en pratique c'est celle du moment de la récupération qui s'y trouve.
Le ^ en tête indique que « les versions plus récentes compatibles avec le numéro écrit sont également autorisées ».
Outre les dépendances, package.json contient d'autres informations.
- Le nom de l'application elle-même
- Il y est écrit my-app
- Liste les noms des paquets nécessaires au fonctionnement
- npm install lit cette partie
- Récupérer react y ajoute une ligne
- L'endroit où l'on donne un nom court aux commandes fréquentes
- S'appelle avec npm run start
Ce que npm install lit, c'est la partie dependencies, au milieu.
Une seule et même chose porte trois noms, selon l'endroit d'où on la regarde.
Grâce au fichier manifeste, tu n'as pas à transmettre node_modules à qui que ce soit.
| Ce que tu as transmis à un autre ordinateur | Quand la personne tape npm install | my-app fonctionne-t-il ? |
|---|---|---|
| app.js et package.json | Récupère tous les noms de la liste | Le même ensemble est là et ça fonctionne |
| app.js seul | Impossible de savoir quels noms récupérer | L'appel provoque une erreur |
| app.js et node_modules | Le contenu est là sans rien taper | Ça fonctionne, mais tu transmets des centaines de dossiers |
Tu transmets app.js et package.json, et la personne tape npm install une fois.
npm ne lit que les dependencies de package.json, récupère depuis le registre les noms qui y figurent et reconstruit node_modules.
Il n'y a pas besoin de transmettre node_modules lui-même.
Avec la seule liste des noms, le contenu se reconstruit
package.json est le fichier qui liste les noms des paquets nécessaires au fonctionnement de ce my-app.
npm install lit ce fichier et récupère tous les noms d'un coup, donc node_modules peut être reconstruit à tout moment et n'a jamais besoin d'être transmis.
Pareil en Python — pip, requirements.txt et l'environnement virtuel qui sépare les emplacements
Jusqu'ici, les noms employés étaient ceux de JavaScript.
En Python, seuls les noms diffèrent : ce qui est fait est identique.
pip récupère, et requirements.txt est le fichier manifeste qui liste les noms.
Les rôles étant les mêmes, apprendre l'un permet de lire l'autre de la même façon.
La seule différence, c'est l'emplacement : sans environnement virtuel, pip installe les paquets sur tout l'ordinateur.
Ce que l'on crée pour l'éviter, c'est un environnement virtuel (virtual environment ; mécanisme qui crée, sous forme de dossier, un emplacement de paquets réservé à cette application).
- node_modules — les dépendances vont ici
- Invisible depuis une autre application
- Possède son propre node_modules
- Des versions différentes du même nom n'entrent pas en conflit
- site-packages est unique pour tout l'ordinateur
- Si une autre application exige une autre version, il y a conflit
Quand les dossiers sont séparés par application, des versions différentes du même nom cohabitent sans conflit.
Si les procédures d'installation commencent par faire créer un environnement virtuel, c'est pour établir cette séparation.
D'un langage à l'autre, les trois rôles sont les mêmes
Chaque langage a un programme qui récupère, un fichier manifeste qui liste les noms, et un emplacement où se range ce qui arrive.
En JavaScript, ce sont npm, package.json et node_modules ; en Python, pip et requirements.txt, et Python est le seul où les paquets vont sur tout l'ordinateur tant qu'aucun environnement virtuel n'est créé.
Vérification des connaissances
Répondez à chaque question une par une.
Question 2Pour faire tourner le même my-app sur un autre ordinateur, pourquoi n'as-tu pas besoin de transmettre node_modules ?
Question 3Pourquoi récupérer un seul paquet peut-il créer plus d'un dossier dans node_modules ?