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.js | pnpm 4 | pnpm 5 | pnpm 6 | pnpm 7 |
|---|---|---|---|---|
| Node.js 10 | ✔️ | ✔️ | ❌ | ❌ |
| Node.js 12 | ✔️ | ✔️ | ✔️ | ❌ |
| Node.js 14 | ✔️ | ✔️ | ✔️ | ✔️ |
| Node.js 16 | 未知 | 未知 | ✔️ | ✔️ |
| Node.js 18 | 未知 | 未知 | ✔️ | ✔️ |
基础使用
| npm 命令 | pnpm 等效 |
|---|---|
npm install | pnpm 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.org 和 registry.npm.taobao.org 域名将于 2022 年 05 月 31 日零时起停止
pnpm config set registry https://registry.npmmirror.com
报错
powershell无法使用pnpm,报错如下图:
vscode解决方案,配置默认使用cmd
其他解决方案
set-executionpolicy remotesigned
其他
可以把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