包管理工具:pnpm | 京东云技术团队

news2024/10/6 8:33:04

作者:京东零售 杨秀竹

pnpm 是什么

pnpm( performant npm )指的是高性能的 npm,与 npm 和 yarn 一样是一款包管理工具,其根据自身独特的包管理方法解决了 npm、yarn 内部潜在的安全及性能问题,在多数情况下拥有更快速的安装速度、占用更小的存储空间,结合官网给出的性能测试及项目中的使用表现,其具有良好的应用前景。

pnpm 优势

更快的依赖安装速度

pnpm 通过特有的依赖管理方式,使其与其他包管理器相比具有更快的依赖安装速度,下图是官网给出的性能测试数据,在不同情况下安装、更新依赖包的速度性能表现,可以看出在多数情况下其耗时相比于其他包管理工具更短。

actioncachelockfilenode_modulesnpmpnpmYarnYarn PnP
install37.6s17.3s22.1s20.2s
install2.1s1.4s695msn/a
install8.8s4.7s8.8s668ms
install13.1s8s22.8s15.2s
install13.7s14.7s8.9s670ms
install2.6s4s16sn/a
install2s1.4s681msn/a
install2.5s14.1s16.6sn/a
updaten/an/an/a8.3s7.4s8.7s16.9s

更小的包管理空间

使用 pnpm 时,依赖会被存储在内容可寻址的同一存储空间,可以节省大量的磁盘空间。

1、如果你用到了某依赖项的不同版本,只会将不同版本间有差异的文件添加到仓库(store)。

例如,如果某个包有100个文件,而它的新版本只改变了其中1个文件。那么 pnpm update 时只会向存储中心额外添加1个新文件,而不会因为仅仅一个文件的改变复制整新版本包的内容。

2、所有文件都会存储在硬盘上的某一位置。

当软件包被被安装时,包里的文件会硬链接到这一位置,而不会占用额外的磁盘空间这允许你跨项目地共享同一版本的依赖。

更高效安全的依赖管理方式

npm3 与 yarn 存在幽灵依赖(Phantom dependencies)以及 NPM分身(NPM doppelgangers )问题

pnpm 默认创建一个非平铺的 node_modules 及网状链接的包管理方式,因此代码无法访问任意包避免了幽灵依赖问题;又因为依赖始终都是存在 store 目录下,通过硬链接(hard links)进行寻址,一份相同的依赖始终只会被安装一次,因此可以避免 npm 分身问题。

幽灵依赖:某个包没有在 package.json 被依赖,但是用户却能够引用到这个包
npm包分身:在 npm3+ 和 yarn 中,由于存在 hoist 机制,可能大量的依赖被重复安装,导致 npm/yarn 的性能损失

独特的依赖管理方式( links + store)

links

pnpm 通过链接( links)与全局存储空间(store)管理的不同项目的 node_modules 依赖。硬链接(hard links)能指向磁盘上原始文件所在的同一位置(store),但是因为 pnpm 的 node_modules 是树形目录结构,且硬链接只能用于文件不能用于目录,因此需要通过软链接(symbolic link)来实现目录寻址,通过如下一张项目依赖关系图可以更好的理解 pnpm 是如何进行依赖寻址的。

store

例如,如果您的项目中多处都使用 foo 包并且它占用 1MB 的空间,那么看起来它在项目的 node_modules 文件夹中占用了与全局存储(.pnpm store)相同的 1MB 空间。 但是,该 1MB 是磁盘上两个不同位置的相同空间 , 所以 foo 总共占用 1MB,而不是 2MB。

pnpm 会使用名为 .pnpm-store 的存储路径来存储该磁盘项目下的所有 node_modules 依赖,通常是在项目的根目录下,Mac/linux 中默认会设置到 {home dir}>/.pnpm-store/v3;windows 下会设置到当前盘的根目录下,比如D盘(D/.pnpm-store/v3)。由于硬链接寻址的限制,pnpm 不可以跨多个驱动器或文件系统工作,即不同的系统磁盘目录都会存处一份依赖包。

项目应用

从 npm、yarn 进行迁移的过程

pnpm 的安装

有无安装 nodejs,pnpm 都提供了对应的安装方式,具体指令可参考官网,将npm对应的指令置换为 pnpm 即可。在安装 pnpm 时需要注意 nodejs 的兼容版本

npm install -g pnpm

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

lock文件迁移

通过 pnpm import 可以将npm、yarn的 lock 文件迁移生成 pnpm-lock.yaml 锁定依赖版本

总结

pnpm 通过软、硬链接(hark link、symbolic link) + 全局存储(store)结合的依赖管理方式完全实现了依赖树结构的包管理方式,解决了 npm3 及 yarn 中的幽灵依赖和 npm 分身的问题,提升了依赖包的安装速度,减小了磁盘空间占用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/531788.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

耗子叔-我的互联网引路人

早上一早看到各大程序员群提到左耳朵耗子-陈皓,因为心梗辞世的信息,真的让人难以置信,因为据我所知他还不到50。 虽然我从来没见过他,交谈也很少,但是我知道他的情况,知道他的公司,知道他的好恶…

不要再问我加密的问题了,使用crypto-js中的AES加密方法,连续多次加密/解密,注意事项

每日鸡汤,每个你想要学习的念头,都是未来的你向自己求救 需求:有一段字符串text,有3个key,后端用这三个key一次加密;然后把加密后的字符串返回给前端,前端用这3个key依次解密,得到原…

剖析:在线帮助中心对企业能够起到什么作用?

随着互联网技术的不断发展和普及,越来越多的企业开始将自己的业务转移到了线上。这种转移不仅能够大幅度提高企业的效率,还能够让企业的服务更加贴近用户的需求。然而,在线服务也存在着一些问题,比如用户可能会遇到一些困难&#…

大人,时代变了!缺少成本票可不能买发票啊,是有办法的!

业务是流程,财税是结果,税收问题千千万,关注《税算盘》来帮你找答案。 企业所得税和增值税一样,都是我国重要的税收之一。企业所得税征收对象为企业的利润部分,再度细分就与企业的成本票有关。 企业所得税高是如今众…

电商系统分类树查询功能优化方案总结

前言 分类树查询功能,在各个业务系统中可以说随处可见,特别是在电商系统中。 但就是这样一个简单的分类树查询功能,我们却优化了5次。 到底是怎么回事呢? 背景 我们的网站使用了SpringBoot推荐的模板引擎:Thymelea…

案例5:Java大学生创新创业项目管理设计与实现任务书

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

RK3568|3588|3566处理器属于什么档次?

随着科技的迅猛发展,处理器作为计算机和电子设备的核心组件,其性能的提升对于设备的功能和用户体验起着至关重要的作用。在处理器市场中,不同的处理器被划分为不同的档次,以便用户能够更好地选择适合自己需求的产品。那么&#xf…

解决git clone与git push出现的若干问题:Failed to connect to github.com port 443: Timed out

1 连接github失败问题汇总:Failed to connect to github.com port 443: Timed out 1.1 解决ping不通github.com的问题 1.1.1 查询github的IP的地址 在以下链接找到网页显示github的ip地址http://github.global.ssl.fastly.net.ipaddress.com/,如图所示…

FSW26现金回收RS FSW43 信号和频谱分析仪

Rohde & Schwarz FSW26信号和频谱分析仪,2 Hz - 26.5 GHz 高性能 Rohde & Schwarz (R&S) FSW26 信号和频谱分析仪专为方便、准确和快速而设计。其独特的触摸屏、直观的多视图结果显示和优化的用户指南使 R&S FSW26 分析仪的操作高效方便。凭借其无…

玩转ChatGPT:AskYourPDF插件尝鲜

一、写在前面 首先,吐槽一下,感觉被CloseAI耍了: 上周发文说这一周对PLUS开放联网和插件功能,搞得网络一片狂欢。但是今天通过身边统计学发现,开通了PLUS后,拥有联网和插件功能的只是少数(而且…

TCP连接不释放,应用产生大量CLOSE_WAIT状态TCP

一、起源 23年元旦期间,大家都沉浸在一片祥和的过节气氛当中。 “滴滴滴”,这头同事的电话响起,具体说些什么我也没太在意,但见同事接完电话之后展现出了一副懊恼夹杂着些许不耐烦的表情。 我不解问道:“怎么了&…

扇区(sector),块(block),簇(cluster)

1.硬盘(可以认为硬盘就是磁盘) # fdisk -l Disk /dev/cciss/c0d0: 146.7 GB, 146778685440 bytes 255 heads, 63 sectors/track, 17844 cylinders Units cylinders of 16065 * 512 8225280 bytes 可以看到几个名词:heads/sectors/cylinders,分别就是磁…

altium Designer22 AD22 CAD电子绘图员三级知识点操作说明

文章目录 AD22一、解决局域网中多台电脑冲突:禁用license的网络功能二、添加库文件三、库的使用四、库绘制1、原理图库绘制2、PCB封装库绘制 五、动态标题栏六、原理图模板的使用七、层次电路图设计1、在母图上放置页面符2、给sheet symbol添加Entry,名字与子图原理…

案例4:Java宠物管理系统设计与实现开题报告

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

后端返回文件流,前端实现点击按钮自动导出Excel文件

首先封装接口,此接口需要传Excel目标数据中的主键id,注意要加上responseType: blob import request from /utils/request; const prefix xxxxx /test;export async function exportExcel(id: any) {return request(prefix /export-excel/ id,{metho…

同科医药×实在智能丨数字员工“进驻”上市企业,让健康服务更近、更快、更优惠!

数字化浪潮构成了新世界跳动的脉搏,在医药行业转型的大环境下,实现数字化升级已经成为医药企业走向未来、拓展全球市场的必由之路。 近日,济南同科医药物流有限公司(简称“同科医药”,系同科股份全资子公司&#xff0c…

用“平面两点距离”求三角形面积及多边形面积

大于 32 边的多边形,都可以任一顶点发出的边切分为 n-2 个三角形。 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单…… 地址&#…

IIC通信理解

前言 就个人对IIC通信的理解,通过用图文的方式,尽量简洁的记录下此文。希望能对大家理解IIC通信协议有所帮助。 理解IIC 对于IIC协议的理解,我个人是将完整的IIC时序协议,分成六大块理解。分别是开始条件,结束条件,发送字节,发送字…

数智赋能,专精特新 | 数说故事揽获多项荣誉认定

迈进2023崭新的节点, 数说故事秉持着数据驱动智能决策的使命, 专精特新,砥砺深耕, 拥抱大模型,算法技术迈上新台阶; 推陈出新,产品线持续迭代升级; 以行业领先的技术、专业的数…

基础IO(三)

软硬链接和动静态库 1.软硬链接2.动态库和静态库2.1理解现象2.2静态库的设计2.3动态库2.4动态库的配置2.5动态库的理解 🌟🌟hello,各位读者大大们你们好呀🌟🌟 🚀🚀系列专栏:【Linux…