Guide d'utilisation de pnpm
En tant que développeur Node.js, vous avez certainement entendu parler de
npmetyarn, ce sont des outils puissants pour gérer les dépendances d'un projet. Mais avez-vous déjà rencontrénode_modulesla frustration de dossiers énormes, de vitesses d'installation lentes ou d'un espace disque rempli rapidement ? C'est le problème que pnpm peut résoudre.
pnpmest un gestionnaire de paquets Node.js rapide et économe en espace disque. Il stocke les paquets en utilisant l'adressage par contenu, avec toutes les versions des dépendances stockées de manière centralisée à un emplacement du système, puis liées aux projets via des liens physiques, évitant ainsi les installations en double.
Le slogan de pnpm estFast, disk space efficient package manager(gestionnaire de paquets rapide et économe en espace disque). Non seulement il est extrêmement rapide, mais son mécanisme de liaison unique vous permet également d'économiser une quantité importante d'espace disque et de bande passante.
Installation de pnpm
Il existe plusieurs façons d’installer pnpm ; vous pouvez choisir selon vos préférences et votre environnement système.
Méthode 1 : Installer via npm (recommandée pour tous les utilisateurs)
C’est la méthode la plus universelle et la plus simple. Ouvrez votre terminal (les utilisateurs Windows peuvent utiliser PowerShell ou CMD) et exécutez la commande suivante :
npm install -g pnpm
Cette commande installera pnpm dans votre environnement global via npm.
Vérifiez si l’installation a réussi: Après l’installation, exécutez la commande suivante pour vérifier la version. Si le numéro de version s’affiche normalement, l’installation a réussi.
pnpm --version
Sortie similaire à : 8.15.0
Méthode 2 : Installer via un script autonome
Pour les utilisateurs de macOS ou Linux, vous pouvez installer à l’aide du script suivant :
# macOS/Linux curl -fsSL https://get.pnpm.io/install.sh | sh - # Windows (PowerShell) iwr https://get.pnpm.io/install.ps1 -useb | iex
Utilisation de pnpm
Maintenant que vous avez appris à l’installer, commençons à utiliser réellement pnpm. La conception de ses commandes est très intuitive ; si vous êtes familier avec npm, vous pouvez passer de l’un à l’autre presque sans difficulté.
Initialiser un nouveau projet
Similaire ànpm init, pnpm peut être utilisé pour initialiser un projet et créerpackage.jsonfichier.
# 交互式地回答问题,创建 package.json pnpm init # 快速创建一个带有默认值的 package.json pnpm init -y
Exécutezpnpm init -yEnsuite, vous obtiendrez un fichier très basiquepackage.jsonfichier :
Exemple
"name": "your-project-name",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Installer les dépendances
la commande install de pnpm estpnpm add <package-name>, équivalent ànpm install <package-name>。
# 安装所有依赖 pnpm install # 添加依赖包 pnpm add <package-name> # 添加开发依赖 pnpm add -D <package-name> # 添加全局包 pnpm add -g <package-name> # 安装指定版本 pnpm add <package-name>@<version>
Mettre à jour les dépendances
# 更新所有依赖 pnpm update # 更新指定包 pnpm update <package-name> # 更新到最新版本(忽略 package.json 中的版本范围) pnpm update --latest
Supprimer les dépendances
pnpm remove <package-name>
Exécuter des scripts
# 运行 package.json 中定义的脚本 pnpm run <script-name> # 一些常见的简写 pnpm start pnpm test pnpm build
Tableau comparatif des commandes npm et pnpm
| commande npm | commande pnpm |
|---|---|
npm install |
pnpm install |
npm install <pkg> |
pnpm add <pkg> |
npm install <pkg> --save-dev |
pnpm add -D <pkg> |
npm install <pkg> --global |
pnpm add -g <pkg> |
npm update |
pnpm update |
npm uninstall <pkg> |
pnpm remove <pkg> |
npm run <script> |
pnpm run <script> |
npx <command> |
pnpm dlx <command> |
npm list |
pnpm list |
npm outdated |
pnpm outdated |
npm audit |
pnpm audit |
Fichier de configuration
pnpm prend en charge la configuration via le fichier.npmrc.
Créer ce fichier dans le répertoire racine du projet vous permet de personnaliser le comportement de pnpm.
Exemples de configuration courants
# 设置国内镜像源(淘宝) registry=https://registry.npmmirror.com # 自动安装 peer dependencies auto-install-peers=true # 严格模式 strict-peer-dependencies=true # shamefully-hoist(提升依赖,兼容某些工具) shamefully-hoist=true # 指定 node_modules 目录结构 node-linker=hoisted # 设置存储目录 store-dir=~/.pnpm-store
Afficher la configuration actuelle
pnpm config list
Définir les options de configuration :
pnpm config set <key> <value>
Espace de travail
pnpm dispose d'une prise en charge intégrée puissante des monorepos.
Définissez un espace de travail en créant un fichier pnpm-workspace.yaml dans le répertoire racine du projet.
Exemple de configuration :
packages: - 'packages/*' - 'apps/*' <p> - '!**/test/**'Exemple de structure de projet :
my-monorepo/
├── pnpm-workspace.yaml
├── package.json
├── packages/
│ ├── package-a/
│ │ └── package.json
│ └── package-b/
│ └── package.json
└── apps/
└── web-app/
└── package.json
Commandes d'espace de travail
# 在所有工作区包中安装依赖 pnpm install # 在指定工作区执行命令 pnpm --filter <package-name> <command> # 在所有工作区执行命令 pnpm -r <command> # 递归运行脚本 pnpm -r run build # 为工作区添加依赖 pnpm --filter <package-name> add <dependency> # 添加工作区内部依赖 pnpm --filter package-a add package-b@workspace:*
Protocole d'espace de travail
Lorsque vous référencez d'autres paquets au sein de l'espace de travail, utilisez le protocole workspace: :
json{
"dependencies": {
"package-a": "workspace:*",
"package-b": "workspace:^1.0.0"
}
}Fonctionnalités avancées
pnpm exec et pnpm dlx
# 执行本地安装的包 pnpm exec <command> # 执行远程包(类似 npx) pnpm dlx create-react-app my-app # 使用特定版本 pnpm dlx create-react-app@latest my-app
Afficher l'arborescence des dépendances
# 查看依赖树 pnpm list # 指定深度 pnpm list --depth 2 # 只显示生产依赖 pnpm list --prod # 查看全局包 pnpm list -g
Afficher les dépendances obsolètes
pnpm outdated
Auditer la sécurité des dépendances
pnpm audit # 自动修复安全问题 pnpm audit --fix
Nettoyer le cache
# 清理未使用的包 pnpm store prune # 查看存储位置 pnpm store path # 查看存储状态 pnpm store status
Importer le fichier de verrouillage
Lors d’une migration depuis d’autres gestionnaires de paquets :
# 从 package-lock.json 导入 pnpm import # 从 yarn.lock 导入 pnpm import
Patcher des paquets
Lorsque vous devez modifier temporairement un paquet de dépendance :
# 创建补丁 pnpm patch <package-name>@<version> # 应用补丁后提交 pnpm patch-commit <path>
Qu’est-ce que pnpm ? Quels sont ses principaux avantages ?
Avant d’approfondir l’utilisation, nous devons d’abord comprendre la philosophie fondamentale de pnpm et les changements qu’elle apporte.
pnpm (Performant npm)est un gestionnaire de paquets Node.js rétrocompatible avec npm, ce qui signifie que la grande majorité desnpmcommandes danspnpmpeuvent être utilisées directement.
L'objectif de conception de pnpm est de résoudre les goulots d'étranglement des gestionnaires de paquets traditionnels (tels que npm et yarn) en matière d'espace disque et de vitesse d'installation.
Problèmes avec les gestionnaires de paquets traditionnels
Imaginez que vous travaillez sur 10 projets frontend différents dans votre entreprise, et chaque projet dépend de[email protected]. En utilisant npm ou yarn, celodashpaquet sera entièrement téléchargé et stocké 10 fois, dans 10node_modulesdossiers différents sur votre ordinateur. Cela entraîne un énorme gaspillage d'espace disque.
L'approche révolutionnaire de pnpm : stockage adressable par contenu et liens durs
pnpm utilise une approche astucieuse :
- Stockage global: Lorsque vous installez un paquet, pnpm stocke son contenu dansun dépôt global à version unique(généralement situé à
~/.pnpm-store)。 - Liens durs: Dans votre projet
node_modulesdans, pnpm ne copie pas l'intégralité des fichiers du paquet, mais crée desliens durs. Vous pouvez considérer un lien dur comme un « raccourci avancé » ; il partage les mêmes données sur le disque que le fichier d'origine. - Organisation des liens symboliques: Pour maintenir
node_modulesstructure plate (pour faciliterrequireinstructions), pnpm crée un ensemble sophistiqué deliens symboliques(liens souples) pour organiser l'arbre des dépendances.
Grâce à ce mécanisme,peu importe le nombre de projets qui dépendent du même paquet, une seule copie du paquet est enregistrée sur le disque physique.. Cela apporte des avantages immédiats :
- Économise une grande quantité d'espace disque: Pour les développeurs ayant plusieurs projets, les économies sont extrêmement importantes.
- Vitesse d'installation extrêmement rapide: Lors des installations suivantes, si le paquet existe déjà dans le magasin global, pnpm n'a besoin que de créer des liens, ce qui est plusieurs ordres de grandeur plus rapide que le téléchargement et l'extraction.
- Sécurité améliorée:
node_modulesLes fichiers de paquets qu'il contient sont en lecture seule (car ce sont des liens physiques), ce qui évite le risque que les scripts de projet modifient accidentellement le contenu des paquets de dépendances et garantit le déterminisme des dépendances.

La figure ci-dessus montre clairement le flux de travail principal de pnpm : tous les projets partagent le même fichier de paquet dans le magasin global via des liens physiques, puis dans leursnode_modulesrépertoires respectifs, la structure des dépendances est construite via des liens symboliques.
| Comparaison des fonctionnalités | npm (v7+) / yarn | pnpm |
|---|---|---|
| Utilisation de l'espace disque | Les dépendances de chaque projet sont stockées indépendamment, ce qui occupe beaucoup d'espace. | Tous les projets partagent uneseule copie, avec une utilisation de l'espace extrêmement faible. |
| Vitesse d'installation | Plus lente ; nécessite de télécharger, d'extraire et de construire l'arbre des dépendances. | Extrêmement rapide, en particulier pour les installations ultérieures, qui consistent principalement à créer des liens. |
node_modulesStructure |
Plate ou semi-plate, ce qui peut entraîner des problèmes de hoisting des dépendances et de dépendances fantômes. | Structure strictenon plate, simulant avec précision les relations de dépendance et éliminant les dépendances fantômes. |
| Prise en charge des monorepos | Pris en charge via Workspaces, mais avec des goulots d'étranglement de performance. | Prise en charge native et efficacedes Workspaces ; la performance est son atout. |
| Modèle de gestion des paquets | Copie les fichiers dans le projet lors de l'installation. | Modèle de liens (liens durs + liens symboliques). |
| Sécurité | Les dépendances peuvent être modifiées par les scripts du projet. | Les fichiers de dépendances sont des liens durs en lecture seule, offrant une sécurité renforcée. |
Ressources officielles:
Autres extensions