pnpm实践及分析

# 简介

pnpm - 速度快、节省磁盘空间的软件包管理器

image-20220210203245778

# 安装/升级

通过 npm 安装 pnpm

npm install -g pnpm
1

通过 npx 安装 pnpm

npx pnpm add -g pnpm
1

一旦安装完 pnpm 之后,就无需使用其它软件包管理器来更新 pnpm 了。 你可以让 pnpm 自己来更新自己,如下所示:

pnpm add -g pnpm
1

兼容性

Node.js pnpm 1 pnpm 2 pnpm 3 pnpm 4 pnpm 5 pnpm 6
Node.js 4 ✔️
Node.js 6 ✔️ ✔️
Node.js 8 ✔️ ✔️ ✔️
Node.js 10 ✔️ ✔️ ✔️ ✔️ ✔️
Node.js 12 ✔️ ✔️ ✔️ ✔️
Node.js 14 ✔️ ✔️ ✔️ ✔️
Node.js 16 ? ? ?️ ?️ ?️ ✔️

# 用法

# pnpm cli

# 与 npm 的差异

与 npm 不同,pnpm 会验证所有参数。例如,pnpm install --target_arch x64 将运行 失败,由于 --target_arch 不是一个有效的 pnpm install 参数。

但是,某些依赖项可能会使用以 npm_config_ 开头的环境变量,该环境变量 是可以通过 CLI 参数添加的。在这种情况下,假定有如下参数:

  1. 直接设置环境变量:npm_config_target_arch=x64 pnpm install
  2. 利用 --config. 前缀强制设置参数:pnpm install --config.target_arch=x64

# 参数

-C , --dir <path

<path> 设置为 pnpm 的运行目录,而不是当前目录。

-w, --workspace-root

添加于:v5.6.0 版本

workspace (opens new window) 的根目录作为 pnpm 的运行目录,而不是 当前目录。

# 命令

有关更多信息,请参见各个 CLI 命令的文档。以下 是一个与 npm 等价命令的对照表,帮助你快速入门:

npm 命令 pnpm 等价命令
npm install pnpm install (opens new window)
npm i <pkg> pnpm add (opens new window)
npm run <cmd> pnpm (opens new window)

当你使用一个未知命令时,pnpm 将会查找和该命令具有相同名称的脚本, 因此,pnpm run lintpnpm lint 是一样的。如果没有相同名称的脚本的话, 那么 pnpm 将按照 shell 脚本的形式执行该命令,所以你可以执行类似 pnpm eslint (see pnpm exec (opens new window)) 指令的命令。

# pnpx命令

此命令已废弃!请使用 pnpm exec (opens new window)pnpm dlx (opens new window) 代替。

# 致新用户

pnpx (PNPm eXecute) 是一种命令行工具,可以从软件包注册表中获取软件包 而不用将其作为依赖项安装,而是热加载该软件包并运行该软件包 所暴露的任何默认的二进制文件。

例如,如需在任何地方都能使用 create-react-app 来创建 react 应用程序的骨架,并且 不用将其安装在任何项目中,你可以这样:

pnpx create-react-app my-project
1

上述命令将从软件包注册表中获取 create-react-app 并用给定的参数运行它。 如需了解更多信息,请参考 npm 中的 npx (opens new window),因为这两个命令提供的功能 是一样的,除了 pnpx 在底层用的是 pnpm 而不是 npm

如果你只是想运行项目依赖项的可执行文件,请参阅 pnpm exec (opens new window)

# 致 npm 用户

npm 有一个很好的软件包运行工具叫做 npx (opens new window)。pnpm 通过 offers the same tool via the pnpx 命令提供了相同功能的工具。唯一的区别就是 pnpx 使用 pnpm 来安装 软件包。

# 配置

pnpm 使用的是 npm 的配置 (opens new window) 格式。因此,你应该以 npm 相同的方式来对其进行配置。例如,

pnpm config set store-dir /path/to/.pnpm-store
1

如果未配置任何存储,则 pnpm 将在同一硬盘上自动创建一个存储。 如果你需要 pnpm 能够跨多个硬盘或文件系统工作, 请阅读 FAQ (opens new window)

此外,载安装依赖项时,pnpm 与 npm 使用相同的配置。 如果你为 npm 配置了一个私有的软件包注册表, pnpm 也能够获得授权请求,并且无需任何额外的 配置。

除了这些参数外,pnpm 还允许你将所有标记(flags)作为参数使用 (例如,--filter--workspace-concurrency):

workspace-concurrency = 1
filter = @my-scope/*
1
2

如需了解更多信息,请参考e config 命令 (opens new window)

# 参考链接

https://www.pnpm.cn/

上次更新: 2022/04/15, 05:41:27
×