Guide d'utilisation de pnpm

En tant que développeur Node.js, vous avez certainement entendu parler denpmetyarn, 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 :

  1. Stockage global: Lorsque vous installez un paquet, pnpm stocke son contenu dansun dépôt global à version unique(généralement situé à~/.pnpm-store)。
  2. Liens durs: Dans votre projetnode_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.
  3. Organisation des liens symboliques: Pour maintenirnode_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