Introduction à pnpm : Une Alternative Plus Rapide à npm et Yarn
Si vous avez déjà regardé votre pipeline CI/CD passer plusieurs minutes à installer des dépendances ou si vous avez eu des problèmes d’espace disque sur vos machines de développement en raison de packages dupliqués entre projets, vous expérimentez exactement les problèmes que pnpm a été conçu pour résoudre. Ce gestionnaire de packages performant propose une approche fondamentalement différente de la gestion des dépendances qui peut réduire les temps d’installation de 2 à 3 fois et diminuer l’utilisation du disque d’environ 50 %.
Points Clés
- pnpm utilise un stockage adressable par contenu avec des liens physiques pour éliminer les packages dupliqués entre projets
- La résolution stricte des dépendances prévient les dépendances fantômes et détecte les erreurs avant la production
- Les vitesses d’installation s’améliorent de 2 à 3 fois par rapport à npm, avec 50 % d’utilisation disque en moins
- La prise en charge native des workspaces le rend idéal pour les architectures monorepo
Ce Qui Rend pnpm Différent
Contrairement à npm et Yarn, qui dupliquent les packages entre projets, pnpm utilise un stockage adressable par contenu avec des liens physiques pour partager les dépendances globalement. Lorsque vous installez Express dans plusieurs projets, npm crée des copies séparées dans chaque dossier node_modules. pnpm le stocke une seule fois dans ~/.pnpm-store et crée des liens physiques vers cette copie unique, réduisant considérablement l’utilisation du disque tout en maintenant une isolation complète entre les projets.
Cette architecture prévient également les « dépendances fantômes » (phantom dependencies) — un problème courant où le code peut accidentellement importer des packages non listés dans package.json. Avec la résolution stricte des modules Node.js de pnpm, si une dépendance n’est pas explicitement déclarée, votre code ne peut pas y accéder, détectant ainsi les erreurs avant qu’elles n’atteignent la production.
Installation et Configuration
Pour Node.js 16.13 ou ultérieur, la méthode d’installation recommandée utilise Corepack :
corepack enable
corepack prepare pnpm@latest --activate
Alternativement, installez via npm :
npm install -g pnpm
Commandes Essentielles pour le Développement Quotidien
Les commandes principales de pnpm reflètent la syntaxe familière de npm tout en ajoutant des optimisations de performance :
pnpm add express # Ajouter une dépendance de production
pnpm add -D typescript # Ajouter une dépendance de développement
pnpm remove lodash # Supprimer un package
pnpm update # Mettre à jour toutes les dépendances
pnpm run build # Exécuter un script depuis package.json
La commande pnpm store fournit des fonctionnalités uniques pour gérer le cache global des packages :
pnpm store status # Vérifier l'état du store
pnpm store prune # Supprimer les packages non référencés
Discover how at OpenReplay.com.
Configuration pour les Projets Modernes
Créez un fichier .npmrc pour configurer le comportement de pnpm pour votre équipe :
strict-peer-dependencies=true
auto-install-peers=true
prefer-offline=true
Ces paramètres imposent les exigences de peer dependencies, installent automatiquement les peer dependencies (Node.js 16+), et privilégient les packages en cache pour accélérer les installations.
Configuration des Workspaces pour les Monorepos
Pour les projets monorepo, la prise en charge des workspaces de pnpm excelle dans la gestion de plusieurs packages. Créez un fichier pnpm-workspace.yaml :
packages:
- 'packages/*'
- 'apps/*'
Liez les packages du workspace en utilisant le protocole workspace: dans package.json :
{
"dependencies": {
"@myapp/shared": "workspace:*",
"@myapp/ui": "workspace:^1.0.0"
}
}
Exécutez des commandes sur tous les packages du workspace :
pnpm -r build # Construire tous les packages
pnpm --filter @myapp/api dev # Exécuter le script dev dans un package spécifique
Optimisation CI/CD
Pour GitHub Actions, utilisez l’action officielle pnpm avec Node.js 22 LTS :
- uses: pnpm/action-setup@v4
with:
version: 9
- uses: actions/setup-node@v4
with:
node-version: 22
cache: 'pnpm'
- run: pnpm install --frozen-lockfile
- run: pnpm test
Pour GitLab CI, configurez la mise en cache pour maximiser l’optimisation CI/CD :
image: node:22
before_script:
- corepack enable
- corepack prepare pnpm@latest --activate
cache:
key: pnpm-store-$CI_COMMIT_REF_SLUG
paths:
- .pnpm-store
install:
script:
- pnpm config set store-dir .pnpm-store
- pnpm install --frozen-lockfile
Le flag --frozen-lockfile garantit des builds reproductibles en échouant si pnpm-lock.yaml ne correspond pas à package.json, empêchant ainsi les dérives entre les environnements de développement et de production.
Performance en Pratique
Les équipes migrant depuis npm constatent généralement des vitesses d’installation améliorées de 2 à 3 fois grâce à la stratégie de liaison efficace de pnpm. Un projet de taille moyenne avec 500 dépendances peut prendre 60 secondes avec npm mais seulement 20 à 25 secondes avec pnpm. Les économies d’espace disque sont encore plus spectaculaires — les développeurs travaillant sur plusieurs projets récupèrent souvent 5 à 10 Go d’espace à mesure que les packages dupliqués sont éliminés.
Conclusion
pnpm tient sa promesse d’une gestion des dépendances plus rapide et plus efficace grâce à une architecture innovante plutôt qu’à des améliorations incrémentales. Sa résolution stricte des dépendances détecte les erreurs précocement, tandis que ses capacités de configuration de workspaces le rendent idéal pour les architectures monorepo modernes. Que vous optimisiez des pipelines CI/CD ou gériez des applications full-stack complexes, pnpm fournit la performance et la fiabilité dont les équipes de développement ont besoin sans sacrifier la compatibilité avec l’écosystème npm existant.
FAQ
pnpm applique par défaut une résolution stricte des peer dependencies. Il n'installe pas automatiquement les peer dependencies à moins que vous n'activiez auto-install-peers dans votre configuration. Cela prévient les conflits de versions et garantit que votre projet déclare explicitement toutes les dépendances requises.
Oui, pnpm est entièrement compatible avec les projets npm et Yarn. Exécutez simplement pnpm import dans le répertoire de votre projet pour générer un fichier pnpm-lock.yaml à partir de votre fichier de verrouillage existant. Tous vos scripts npm et configurations package.json fonctionnent sans modification.
Les packages restent dans le store global même après leur désinstallation des projets. Cela permet une réinstallation instantanée si nécessaire ultérieurement. Exécutez pnpm store prune périodiquement pour supprimer les packages non référencés et libérer de l'espace disque.
Absolument. pnpm est prêt pour la production et utilisé par de grandes entreprises. Utilisez pnpm install --frozen-lockfile en production pour garantir des versions de dépendances exactes. Les installations déterministes et la résolution stricte des dépendances rendent en fait les déploiements plus fiables qu'avec les gestionnaires de packages traditionnels.
Understand every bug
Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.