希乐摘要

pnpm 是一个具有速度快、节省磁盘空间的特点的软件包管理器。它比 npm 快近 2 倍,node_modules 中的文件克隆或硬链接自单一存储位置,内置对单个源码仓库中包含多个软件包的支持,创建的 node_modules 默认并非扁平结构,权限严格。pnpm 拥有广泛的用户群体,包括 Compass、Microsoft、Prezi、ByteDance、JustAnswer 等。

为什么要用pnpm

起因是因为我在hexo中安装插件是是用npm进行安装的,经常性的卡死(换用国内镜像源也不能解决)和占用大量磁盘空间,受不了了,在某一天我突然萌生了为什么不使用其它包管理器,于是pnpm就进入了我的眼前。当然包管理器还有cnpm,yarn… 不使用它们是因为pnpm的优势更大。

安装pnpm

使用独立脚本安装

即使没有安装 Node.js,也可以使用以下脚本安装 pnpm。

Windows

使用 PowerShell:

1
Invoke-WebRequest https://get.pnpm.io/install.ps1 -UseBasicParsing | Invoke-Expression

使用 npm 安装

当然pnpm也可以使用npm进行安装

npm官方提供了两个 pnpm CLI 包, pnpm@pnpm/exe

  • pnpm 是 pnpm 的普通版本,需要 Node.js 运行。
  • @pnpm/exe 与 Node.js 一起打包成可执行文件,因此它可以在没有安装 Node.js 的系统上使用。
1
npm install -g pnpm

或者

1
npm install -g @pnpm/exe

安装完成后,可以配置国内镜像源以提升下载速度

1
2
3
4
5
6
7
8
# 获取当前配置的镜像地址
pnpm get registry
or
pnpm config get registry

# 设置新的镜像地址
pnpm set registry https://registry.npmmirror.com

兼容性

以下是各版本 pnpm 与各版本 Node.js 之间的兼容性表格。

Node.jspnpm 7pnpm 8pnpm 9
Node.js 12
Node.js 14✔️
Node.js 16✔️✔️
Node.js 18✔️✔️✔️
Node.js 20✔️✔️✔️

用法

常用命令对比

npm 命令pnpm 等价命令
npm installpnpm install 安装全部依赖
npm install 包名pnpm add (-D) 包名 安装指定包(pnpm install也可以)
npm uninstall 包名pnpm remove 包名 移除指定包
npm run 脚本pnpm 脚本 运行脚本

pnpm 的大部分用法和npm相同,可能有些差异,如果在使用过程遇到了什么问题可以阅读

pnpm CLI | pnpm中文文档 | pnpm中文网

建议配置

配置PNPM全局安装路径

1
2
3
4
5
6
7
8
9
10
11
12
# 允许设置全局安装包的 bin 文件的目标目录。
pnpm config set global-bin-dir "E:\pnpm-store"
# 包元数据缓存的位置。
pnpm config set cache-dir "E:\pnpm-store\pnpm-cache"
# pnpm 创建的当前仅由更新检查器使用的 pnpm-state.json 文件的目录。
pnpm config set state-dir "E:\pnpm-store\pnpm-state"
# 指定储存全局依赖的目录。
pnpm config set global-dir "E:\pnpm-store\global"
# 所有包被保存在磁盘上的位置。
#(可选,以下这条命令可以选择不执行也是OK的)
pnpm config set store-dir "E:\pnpm-store\pnpm-store"

纸鹿大佬的建议

@纸鹿 (@L33Z22L11)
使用 npm 安装 pnpm 后,建议重新通过 pnpm 安装 pnpm,再将 npm 安装的 pnpm 卸载掉。

1
2
3
4
npm install -g pnpm
pnpm setup
pnpm add -g pnpm
npm remove -g npm