如何安装和使用pnpm

6,218 阅读3分钟

pnpm的原理就是软连接和硬连接
软连接就是下面这个:(安装好的软件想移动到新文件夹可以用它)

mklink D:\ghi.txt C:\Users\Tom\Desktop\test-link\abc\ghi.txt

硬连接就是下面这个:(只可用于单个文件)

mklink /h D:\ghi.txt C:\Users\Tom\Desktop\test-link\abc\ghi.txt
  • 所有 npm 包都安装在全局目录 ~/.pnpm-store/v3/files 下,同一版本的包仅存储一份内容,甚至不同版本的包也仅存储 diff 内容。
  • 每个项目的 node_modules 下有 .pnpm 目录以打平结构管理每个版本包的源码内容,以硬链接方式指向 pnpm-store 中的文件地址。
  • 每个项目 node_modules 下安装的包结构为树状,符合 node 就近查找规则,以软链接方式将内容指向 node_modules/.pnpm 中的包。

所以每个包的寻找都要经过三层结构:node_modules/package-a > 软链接 node_modules/.pnpm/package-a@1.0.0/node_modules/package-a > 硬链接 ~/.pnpm-store/v3/files/00/xxxxxx

安装

先安装node.js 和npm
node v12.14.1,用npm安装

npm install -g pnpm@5

请根据node版本选择pnpm版本,以下是各版本 pnpm 与各版本 Node.js 之间的支持表格。

Node.jspnpm 4pnpm 5pnpm 6pnpm 7
Node.js 10✔️✔️
Node.js 12✔️✔️✔️
Node.js 14✔️✔️✔️✔️
Node.js 16未知未知✔️✔️
Node.js 18未知未知✔️✔️

基础使用

npm 命令pnpm 等效
npm installpnpm install
npm i <pkg>[pnpm add <pkg>]
npm run <cmd>[pnpm <cmd>]

更换源

默认源是 registry = "registry.npmjs.org/"
淘宝源,新的Web 站点:npmmirror.com
Registry Endpoint:registry.npmmirror.com
随着新的域名已经正式启用,老 npm.taobao.orgregistry.npm.taobao.org 域名将于 2022 年 05 月 31 日零时起停止

pnpm config set registry https://registry.npmmirror.com

报错

powershell无法使用pnpm,报错如下图:

image.png

vscode解决方案,配置默认使用cmd

image.png

image.png

其他解决方案

set-executionpolicy remotesigned image.png

其他

可以把registry.npmjs.org目录文件复制到registry.npmmirror.com来离线install

有些包难以安装,淘宝源也安装不成。
1、直接向他人索要或别的地方下载,复制到node_modules,就可以使用
2、直接向他人索要或别的地方下载,放在本地目录,在项目中执行 pnpm add 本地目录/插件文件夹名

用pnpm install ,如果有package-lock.json也可以用npm run serve
用npm install , 如果有pnpm-lock.yaml也可以用pnpm serve

pnpm install报错:
情况一、Failed to find "/fsevents/1.2.13" in lockfile during hoisting. Next aliases will not be hoisted: fsevents 删掉pnpm-lock.yaml,重新pnpm install可以成功,但并不解决问题,再次执行会再报错。
执行pnpm,发现缺失包,包单独安装,就解决了
情况二、本来已经install成功过的,切个分支又说缺东西,然后install不下来(本来install过的)。 删掉pnpm-lock.yaml和node_modules,然后recursive-install 设置为 false.

pnpm config set recursive-install false

然后执行

pnpm i --offline

参考:
精读《pnpm》 - 知乎 (zhihu.com)
vscode设置打开终端默认为cmd_小花皮猪的博客-CSDN博客_vscode设置默认终端
vscode powershell,使用pnpm_毁忆不毁心ら的博客-CSDN博客
高性能的包管理器Pnpm,你学会了吗?-51CTO.COM
pnpm简介 - 简书 (jianshu.com)
windows软链接_HackerTom的博客-CSDN博客_windows 软连接
dos命令-mklink-软链接(符号链接)、硬链接、目录链接的区别_一支椰果乳酸菌的博客-CSDN博客_mklink