Skip to main content

PNPM 初识

· 4 min read
Zeffon Wu

一个速度快、节省磁盘空间的软件包管理器 - pnpm 工具。pnpm 现在广泛被使用,Vue3element-plus 版本都是采用 pnpm 来进行包管理的。

👉 原文链接 👈

介绍

pnpm 是从 传统的包管理工具 npm 和 yarn 衍生而来,但它却解决了 npm 、yarn 内部潜在的 bug,并且极大了地优化了性能,扩展了使用场景。

pnpm 工具的优点:

  1. 快速,pnpm 是同类工具速度的将近 2 倍
  2. 高效,node_modules 中的所有文件均链接自单一存储位置
  3. 支持单体仓库,pnpm 内置了对单个源码仓库中包含多个软件包的支持
  4. 权限严格,pnpm 创建的 node_modules 并非扁平结构,因此代码不能对任意软件包进行访问

pnpm 更多介绍请查看官网

使用

安装

pnpm 的安装非常方便,可以通过 node 中的 npm 命令进行安装

npm install -g pnpm

如果没有安装 node,也可以通过如下安装方式

# Unix 操作系统
wget -qO- https://get.pnpm.io/install.sh | sh -
# 或者
curl -fsSL https://get.pnpm.io/install.sh | sh -

# Windows 系统上
iwr https://get.pnpm.io/install.ps1 -useb | iex

更多的安装教程官网有详细教程。

升级

对于 pnpm 的升级可以通过 pnpm 的命令进行升级

pnpm add -g pnpm

结构

使用 pnpm 安装的依赖目录跟 npm 和 yarn 命令有什么不同呢?

pnpm 目录

  1. 安装 puppeteer 依赖
pnpm i
  1. 生成依赖目录 node_modules 的结构
node_modules
├─ .pnpm
├─ @types
├─ puppeteer
└─ .modules.yaml

yarn 目录

node_modules
├─ .bin
├─ @types
├─ ...
├─ puppeteer
├─ ...
└─ .yarn-integrity

npm 目录

node_modules
├─ .bin
├─ @types
├─ ...
├─ puppeteer
├─ ...
└─ .package-lock.json

以上,很明显 pnpm 命令生成的目录结构很简洁,比 npm 和 yarn 看起来似乎少了很多其他的依赖包。但是,如果你展开 .pnpm 目录,你就会发现,那是缺少的其他依赖包会在此。而在 pnpm 安装的依赖包会只在 node_modules 根目录下出现 puppeteer,其他依赖包会放置在 .pnpm 目录中。而 puppeteer 也只是一个软链接。puppeteer 目录中 node_modules 的依赖包需要链接到 .pnpm 目录下 puppeteer 中。

这就是 pnpm 优化的扁平目录结构,让 node_modules 中的所有文件均链接自单一存储位置。