pnpm

pnpm 包管理器标志

1. 简介

pnpm(Performant npm)是一款高性能的包管理器,旨在解决 npm 和 Yarn 在安装速度、磁盘空间利用率以及 monorepo 支持等方面的问题。

相比于传统的 npm,pnpm 通过独特的硬链接机制,实现了更快的依赖安装速度和更高效的磁盘空间使用。

2. 安装 pnpm

2.1. 使用 npm 安装

最简单的安装 pnpm 的方法是通过 npm。
确保您已经安装了 Node.js 和 npm,然后在终端中运行以下命令:

npm install -g pnpm

2.2. 使用官方安装脚本

pnpm 官方提供了安装脚本,您可以通过以下命令安装 pnpm:

curl -fsSL https://get.pnpm.io/install.sh | sh -

对于 Windows 用户,可以使用 PowerShell:

iwr https://get.pnpm.io/install.ps1 -UseBasicParsing | iex

2.3. 使用 Corepack

如果您使用的是 Node.js v18.12 或更高版本,您可以通过 Corepack 来管理 pnpm:

corepack enable
corepack prepare pnpm@latest --activate

2.4. 验证安装

安装完成后,可以通过以下命令检查 pnpm 版本,以确认安装成功:

pnpm -v

3. 配置 pnpm

3.1. 创建 .npmrc 文件

在项目根目录中创建一个 .npmrc 文件,可以配置 pnpm 的相关设置。
例如,启用自动安装 peer dependencies:

auto-install-peers=true

3.2. 设置镜像源(可选)

如果您需要使用国内的镜像源,可以在 .npmrc 中添加以下配置:

registry=https://registry.npmmirror.com/

4. 基本使用

4.1. 初始化项目

使用 pnpm 初始化一个新的 Node.js 项目:

pnpm init

4.2. 安装依赖

安装项目所需的依赖包,例如安装 axios:

pnpm add axios

4.3. 添加/移除包

添加一个新包:

pnpm add lodash

移除一个包:

pnpm remove lodash

4.4. 更新依赖

更新所有依赖包到最新版本:

pnpm update

5. pnpm 的特性

5.1. 高效的磁盘空间利用

pnpm 采用内容可寻址存储,将依赖包存储在一个全局存储区,通过硬链接的方式在各个项目中共享这些包,从而显著减少磁盘空间的占用。

5.2. 快速的安装速度

pnpm 支持并行安装依赖包,结合缓存机制,使得依赖安装速度明显快于 npm。

5.3. 支持 Monorepo

pnpm 内置对 monorepo 的支持,允许您在一个仓库中管理多个包,简化了多包项目的维护和依赖管理。

5.4. 严格的依赖管理

pnpm 默认采用严格的依赖解析策略,确保项目依赖关系的明确性,减少潜在的依赖冲突。

6. 常见问题

6.1. 如何切换到 pnpm

如果您之前使用的是 npm 或 Yarn,可以通过以下步骤切换到 pnpm:

  1. 删除现有的 node_modules 目录和锁文件:

    rm -rf node_modules package-lock.json yarn.lock
    
  2. 使用 pnpm 安装依赖:

    pnpm install
    

6.2. 如何处理依赖冲突

pnpm 的严格依赖管理可以帮助您发现和解决依赖冲突。
如果遇到问题,可以尝试清理 pnpm 的缓存:

pnpm store prune

然后重新安装依赖:

pnpm install

7. 高级使用

7.1. 使用 pnpm 管理 Monorepo

pnpm 提供了 workspace 功能,方便管理多个包的 monorepo 项目。
以下是一个基本的设置步骤:

  1. 在项目根目录创建 pnpm-workspace.yaml 文件:

    packages:
      - 'packages/*'
    
  2. 在各个子包目录中初始化独立的 package.json 文件。

  3. 使用 pnpm 在根目录安装所有依赖:

    pnpm install
    

8. 总结

pnpm 作为一款高性能的包管理器,凭借其高效的磁盘空间利用、快速的依赖安装速度以及强大的 monorepo 支持,成为了众多开发者的理想选择。
通过本文的详细教程,您已经了解了如何安装、配置以及使用 pnpm 来管理您的项目依赖。
欢迎尝试 pnpm,并体验其带来的开发便利!