pnpm实践及分析
# 简介
pnpm - 速度快、节省磁盘空间的软件包管理器
# 安装/升级
通过 npm 安装 pnpm
npm install -g pnpm
通过 npx 安装 pnpm
npx pnpm add -g pnpm
一旦安装完 pnpm 之后,就无需使用其它软件包管理器来更新 pnpm 了。 你可以让 pnpm 自己来更新自己,如下所示:
pnpm add -g pnpm
兼容性
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 参数添加的。在这种情况下,假定有如下参数:
- 直接设置环境变量:
npm_config_target_arch=x64 pnpm install
- 利用
--config.
前缀强制设置参数:pnpm install --config.target_arch=x64
# 参数
-C
将 <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 lint
和 pnpm 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
上述命令将从软件包注册表中获取 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
如果未配置任何存储,则 pnpm 将在同一硬盘上自动创建一个存储。 如果你需要 pnpm 能够跨多个硬盘或文件系统工作, 请阅读 FAQ (opens new window)。
此外,载安装依赖项时,pnpm 与 npm 使用相同的配置。 如果你为 npm 配置了一个私有的软件包注册表, pnpm 也能够获得授权请求,并且无需任何额外的 配置。
除了这些参数外,pnpm 还允许你将所有标记(flags)作为参数使用 (例如,--filter
或 --workspace-concurrency
):
workspace-concurrency = 1
filter = @my-scope/*
2
如需了解更多信息,请参考e config
命令 (opens new window)。
# 参考链接
https://www.pnpm.cn/