pnpm安装
创始人
2024-12-27 11:41:31
0

1、pnpm是什么

现代的包管理工具 pnpm( performant npm ),意思是高性能的 npm
它由 npm/yarn 衍生而来,但却解决了 npm/yarn 内部潜在的 bug,并且极大了地优化了性能

2、特性有哪些

(1)速度快

官方的benchmark 数据是这样的,但是实际使用发现pnpm的第一次下载包速度跟yarn是差不多的,其优势体现在第二次下载相同的包更快

(2)高效利用磁盘空间
pnpm 内部使用基于内容寻址的文件系统来存储磁盘上所有的文件,这个文件系统出色的地方在于
1、不会重复安装同一个包。用 npm/yarn 的时候,如果 100 个项目都依赖 lodash,那么 lodash 很可能就被安装了 100 次,磁盘中就有 100 个地方写入了这部分代码。但在使用 pnpm 只会安装一次,磁盘中只有一个地方写入,后面再次使用都会直接使用 hardlink(硬链接)
2、即使一个包的不同版本,pnpm 也会极大程度地复用之前版本的代码。举个例子,比如 lodash 有 100 个文件,更新版本之后多了一个文件,那么磁盘当中并不会重新写入 101 个文件,而是保留原来的 100 个文件的 hardlink,仅仅写入那一个新增的文件

(3)*支持monorepo

随着前端工程的日益复杂,越来越多的项目开始使用 monorepo。之前对于多个项目的管理,我们一般都是使用多个 git 仓库,但 monorepo 的宗旨就是用一个 git 仓库来管理多个子项目,所有的子项目都存放在根目录的packages目录下,那么一个子项目就代表一个package。

3、pnpm依赖原理

npm、yarn安装包的问题
在 pnpm 出现以前,npm 和 yarn 为了提高包的复用率,都采用了扁平化的装包策略。扁平化的安装方式会导致我们的 node_modules 文件夹和 package.json 存在很大的出入,比如你install一个包 express,但是你的node_modules下会有很多包
这个时候会有一些问题
(1)幽灵依赖
从目前的包引用方式来说,inport的时候我们会从node_modules的文件夹中寻找,按照上面的图中所示,如果我们在package.json中没有accepts,其实我们也是可以引用到的,因为她确实存在,这时候我们访问的就是未申明npm包,如果某一天express主包不再依赖accepts,这个时候项目就会有依赖缺失的问题。 我们把这种主包依赖的子包,未被申明而在项目中使用,可以理解成是主包夹带的包,我们称之为 幽灵依赖。
(2)包版本的不确定性
这个很好理解,如果A、B两个主包都依赖accepts包,但是A依赖accepts@1.0,B依赖accepts@2.0 ,那node_modules下的扁平结构是展示1.0 还是 2.0 呢?目前的方式是谁后安装的谁就显示。 这种不确定性在开发中引起的问题也不在少数 「别人用这个包可以解决这个问题,但是我安装这个包就不能解决」,往往就是这个原因导致的。
(3)依赖重复安装
这个也很好理解,AB都依赖accepts,依赖不同的版本,无论node_modules的顶层提升了哪个版本,这个包都是会被安装两次的。

补充:在node_modules的根目录下同时还会有一个.pnpm文件,里面保存的是所有包的硬链接

4、pnpm的安装、使用

官网地址:Installation | pnpm

// 全局安装 npm install pnpm -g  //查看源 pnpm config get registry  //切换淘宝源 pnpm config set registry https://registry.npmmirror.com/  // 使用 pnpm install 包 // 安装依赖 pnpm i  包      // 安装依赖 pnpm add 包     // -S  默认写入dependencies pnpm add -D     // -D devDependencies pnpm add -g     // 全局安装  // 移除 pnpm remove 包               // 移除包 pnpm remove 包 --global      // 移除全局包  // 更新 pnpm up                      // 更新所有依赖项 pnpm upgrade 包              // 更新包 pnpm upgrade 包 --global     // 更新全局包  // 查看仓库地址 pnpm store path

注意:pnpm不会自动下载依赖中使用的其他依赖,npm和cnpm可以自动下载依赖中的其他依赖,这涉及到依赖链的问题,pnpm会先检查共享存储库,如果有该依赖则创建符号链接(即硬链接)定位到共享存储库中的依赖,不会重复的去下载。npm则是每个项目都是单独下载的依赖。

// 如果希望自动下载依赖中的依赖 则可以使用 pnpm recursive install // pnpm 还提供了其他一些命令来管理依赖,例如: pnpm recursive add :在项目及其子项目中添加依赖 pnpm recursive update:更新所有依赖

相关内容

热门资讯

1分秒分析新神牛房卡多少米/皇... 1分秒分析新神牛房卡多少米/皇豪互娱房卡代理!游戏中心打开微信,添加客服【113857776】,进入...
终于发现!炸金花房卡怎么弄,新... 微信游戏中心:炸金花房卡,添加微信【66336574】,进入游戏中心或相关小程序,搜索“微信炸金花房...
一秒了解新星游房卡详细充值/新... 房卡详细充值是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:113857776许多玩家在游戏中会购买...
终于发现!微信拼三张房卡哪里有... 微信游戏中心:拼三张房卡,添加微信【71319951】,进入游戏中心或相关小程序,搜索“微信拼三张房...
一分钟实测分享东游房卡领取码/... 一分钟实测分享东游房卡领取码/超稳房卡代理平台!游戏中心打开微信,添加客服【113857776】,进...
秒懂普及新金龙是如何购买的/超... 来教大家如何使用是如何购买的房卡充值 添加房卡批售商:微【113857775】复制到微信搜索、直接添...
终于发现!微信金花房间卡在哪买... 微信游戏中心:金花房卡,添加微信【56001354】,进入游戏中心或相关小程序,搜索“微信金花房卡”...
终于发现!微信创建斗牛好友房间... 微信游戏中心:斗牛房卡,添加微信【66336574】,进入游戏中心或相关小程序,搜索“微信斗牛房卡”...
一分钟实测分享欢乐游低价获取分... 低价获取分享房卡给大家是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:113857776许多玩家在游...
终于发现!微信拼三张房卡找谁买... 微信游戏中心:拼三张房卡,添加微信【71319951】,进入游戏中心或相关小程序,搜索“微信拼三张房...
实测教程新九神房卡详细充值/皇... 来教大家如何使用房卡详细充值房卡充值 添加房卡批售商:微【113857775】复制到微信搜索、直接添...
一分钟实测分享新下游如何买房卡... 如何买房卡是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:113857776许多玩家在游戏中会购买房...
终于发现!微信牛牛房卡专卖店联... 微信游戏中心:斗牛房卡,添加微信【56001354】,进入游戏中心或相关小程序,搜索“微信斗牛房卡”...
实测教程龙鼎房卡获取方式/金花... 实测教程龙鼎房卡获取方式/金花房卡哪里是有卖! 微信牛牛房卡客服微信号微信游戏中心打开微信,添加客服...
终于发现!微信拼三张房卡找谁买... 微信游戏中心:拼三张房卡,添加微信【66336574】,进入游戏中心或相关小程序,搜索“微信拼三张房...
一秒了解新西楚哪里有详细房卡介... 一秒了解新西楚哪里有详细房卡介绍/人海大厅房卡在哪里购买! 微信牛牛房卡客服微信号微信游戏中心打开微...
一秒了解新众亿房卡在哪里买/炸... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...
终于发现!微信群链接拼三张房卡... 微信游戏中心:拼三张房卡,添加微信【71319951】,进入游戏中心或相关小程序,搜索“微信拼三张房...
实测教程新众乐在哪里买房卡/天... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...
终于发现!微信群炸金花房间买房... 微信游戏中心:炸金花房卡,添加微信【56001354】,进入游戏中心或相关小程序,搜索“微信炸金花房...