npm (Node Package Manager) est le gestionnaire de packages standard de la plateforme Node.js, inclus dans l'installation de Node.js. npm gère les dépendances des projets JavaScript et TypeScript : installe les bibliothèques dans node_modules, met à jour les versions des packages, résout les conflits de versions. package.json est le fichier de configuration central avec les métadonnées et la liste des dépendances. npm Registry est le plus grand registre de packages. En savoir plus sur npm Registry.
Points clés
npm a été créé en 2010 par Isaac Schlueter comme solution de gestion des dépendances Node.js. Depuis 2014, npm est géré par npm, Inc., acquise par Microsoft/GitHub en 2020. L'outil se compose de deux parties : la CLI (ligne de commande) pour installer et gérer les packages, et le Registry — le référentiel central de tous les modules publiés sur registry.npmjs.org.
Le npm Registry est le plus grand registre de packages : plus de 2 millions de packages et plus de 10 milliards de téléchargements mensuels. Chaque package a une version SemVer, une description, des dépendances, une licence et un auteur. La publication de votre propre package se fait via npm publish. npm prend en charge les packages avec portée pour les organisations (@scope/package), les registres privés et l'audit de sécurité intégré.
Node.js version 18+ inclut npm 9+ avec des performances améliorées, des espaces de travail pour les monorepos et un mécanisme de dépendances homologues retravaillé. L'écosystème npm couvre JavaScript côté serveur, le frontend (React, Vue, Angular), le développement mobile (React Native), les outils de construction (Webpack, Vite) et les utilitaires CLI. npm est le principal canal de distribution des bibliothèques JavaScript.
npm install — la commande principale qui lit package.json et package-lock.json pour installer toutes les dépendances dans node_modules. Lors de la première exécution, npm calcule le graphe des dépendances, résout les conflits de versions et génère package-lock.json. La commande npm install <package> installe un package spécifique ; le drapeau --save-dev l'ajoute à devDependencies, --global l'installe globalement.
npx — un exécuteur de packages inclus dans npm depuis la version 5.2. npx permet d'exécuter des utilitaires CLI sans installation globale : npx react-native init ou npx create-react-app my-app. npx télécharge le package dans un cache temporaire, l'exécute et le nettoie après la fin. npx est également utile pour exécuter des versions spécifiques d'outils.
npm audit analyse l'arbre des dépendances à la recherche de vulnérabilités connues dans la base de données npm. La commande produit un rapport avec des niveaux de gravité (critical, high, moderate) et recommande npm audit fix pour mettre à jour automatiquement les packages vulnérables. npm cache stocke les packages téléchargés localement. npm cache clean --force vide le cache en cas de problèmes d'installation. npm outdated affiche les packages obsolètes.
# Commandes npm de base
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Exécution sans installation globale
$ npx react-native init MyApp
# Audit de sécurité
$ npm audit --fix
package.json est un fichier JSON à la racine du projet qui décrit ses métadonnées, dépendances et configuration. Champs obligatoires : name (nom unique du package) et version (version SemVer, par exemple 1.0.0). Le fichier est créé avec npm init -y pour une initialisation rapide ou manuellement.
Semantic Versioning (SemVer) est un standard de versionnement au format MAJOR.MINOR.PATCH. La version majeure change avec les modifications incompatibles de l'API, la mineure lors de l'ajout de fonctionnalités (rétrocompatible), le correctif lors de la résolution de bugs. Le symbole ^ devant une version autorise les mises à jour mineures et de correctif, tandis que ~ n'autorise que les mises à jour de correctif.
{
"name": "my-app",
"version": "1.0.0",
"private": true,
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios"
},
"dependencies": {
"react": "^18.3.0",
"react-native": "^0.76.0"
},
"devDependencies": {
"typescript": "^5.5.0",
"@types/react": "^18.3.0"
}
}
| Champ | Objectif | Exemple de valeur |
|---|---|---|
| scripts | Commandes d'exécution pour npm run | "start": "node index.js" |
| dependencies | Dépendances de production de l'application | "react": "^18.3.0" |
| devDependencies | Outils de développement et de test | "jest": "^29.7.0" |
| peerDependencies | Dépendances hôtes pour les bibliothèques | "react": ">=17.0.0" |
| engines | Exigences de version Node.js | {"node": ">=18.0.0"} |
Les projets React Native utilisent activement npm pour la gestion des dépendances. L'ensemble standard comprend react, react-native, les bibliothèques de navigation (React Navigation), de requêtes HTTP (axios), de gestion d'état (Redux, Zustand) et les composants d'interface utilisateur. npm permet d'installer des milliers de packages compatibles depuis le registre.
npx pod-install — une commande obligatoire après l'installation de modules natifs dans React Native pour iOS. npm génère automatiquement un Podfile.lock basé sur package-lock.json. Dans les projets Expo, on utilise expo install au lieu de npm install, car il sélectionne des versions compatibles avec la version actuelle d'Expo SDK.
Les conflits de versions sont un problème courant dans React Native : react-native-reanimated, react-native-gesture-handler et react-native-safe-area-context nécessitent des versions alignées. La solution consiste à mettre à jour tous les packages vers les dernières versions compatibles ou à utiliser --legacy-peer-deps. package-lock.json est essentiel pour les modules natifs compilés via CocoaPods et Gradle.
npm est le gestionnaire de packages standard inclus avec Node.js. Les principales alternatives : yarn (créé par Facebook en 2016) et pnpm (rapide, avec des liens physiques). Depuis npm 5, la différence de vitesse et de fonctionnalités entre npm et yarn est minime. npm 7+ a ajouté les espaces de travail, le rendant compétitif pour les monorepos.
| Caractéristique | npm | yarn | pnpm |
|---|---|---|---|
| Année de création | 2010 | 2016 | 2017 |
| Fichier de verrouillage | package-lock.json | yarn.lock | pnpm-lock.yaml |
| Installation | Séquentielle (npm 5+) | Parallèle | Parallèle |
| Espace disque | Standard | Standard | Minimal (liens) |
| Espaces de travail | Oui (npm 7+) | Oui | Oui |
| Plug'n'Play | Non | Oui | Non |
Selon State of JS 2025 : 62 % des développeurs utilisent npm, 35 % utilisent yarn (principalement des projets anciens et des passionnés de PnP) et 3 % utilisent pnpm. Pour les projets React Native, les deux outils sont également viables, mais npm est plus courant dans les projets utilisant Expo SDK 50+ et les nouvelles initialisations React Native.
yarn conserve son avantage dans les très grands monorepos (100+ packages) grâce à son implémentation plus mature des espaces de travail et de Plug'n'Play. pnpm gagne en économie d'espace disque grâce à des liens physiques vers un magasin global. Le choix du gestionnaire dépend des préférences de l'équipe et de l'infrastructure.
Questions fréquentes
npm install met à jour package-lock.json et peut installer de nouvelles versions mineures dans la plage sémantique. npm ci (Clean Install) supprime node_modules et installe les packages strictement à partir de package-lock.json sans le mettre à jour. npm ci est plus rapide, utilisé en CI/CD et garantit un environnement identique sur toutes les machines. Si package-lock.json est manquant, npm ci génère une erreur.
Depuis npm 7, les conflits de dépendances homologues provoquent des erreurs de compilation. Solutions : mettre à jour tous les packages vers des versions compatibles via npm update, utiliser le drapeau --legacy-peer-deps pour le mode npm 6, ou ajouter une section overrides dans package.json pour forcer une version spécifique d'un package. La meilleure option est de mettre à jour les dépendances vers des versions compatibles.
npm audit analyse l'arbre des dépendances à la recherche de vulnérabilités connues dans la base de données npm Security Advisory. La commande produit un rapport avec un niveau de gravité (critical, high, moderate, low) et recommande npm audit fix pour mettre à jour automatiquement les packages vulnérables vers des versions sûres. Exécuter régulièrement npm audit est une pratique de sécurité de base pour les projets JavaScript.
Les espaces de travail de npm permettent de gérer plusieurs packages dans un seul dépôt. Ajoutez le champ "workspaces" : ["packages/*"] au package.json racine. Avantages : installation unique de toutes les dépendances dans un node_modules partagé, liens symboliques automatiques entre les packages locaux, exécution de scripts pour tous les packages depuis la racine et élimination de la duplication de versions.
package-lock.json verrouille les versions exactes de toutes les dépendances et de leurs packages transitifs. Sans lui, différents développeurs et serveurs CI peuvent obtenir différentes versions de bibliothèques dans la plage sémantique, entraînant des erreurs « ça marche sur ma machine ». Valider le fichier de verrouillage garantit des constructions reproductibles et un comportement identique dans tous les environnements.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi