当前位置:首页 > 科技  > 软件

Pnpm:包管理的新星,如何颠覆 Npm 和 Yarn

来源: 责编: 时间:2024-06-20 15:23:14 293观看
导读在探索现代 JavaScript 生态系统时,我们常常会遇到新兴技术的快速迭代和改进。其中,包管理工具的发展尤为重要,因为它们直接影响开发效率和项目性能。最近,pnpm 作为一种新的包管理工具引起了广泛关注。它不仅挑战了传统

cNt28资讯网——每日最新资讯28at.com

在探索现代 JavaScript 生态系统时,我们常常会遇到新兴技术的快速迭代和改进。其中,包管理工具的发展尤为重要,因为它们直接影响开发效率和项目性能。最近,pnpm 作为一种新的包管理工具引起了广泛关注。它不仅挑战了传统工具如 npm 和 Yarn,还提供了一些独特的优势,使其在许多方面超越了前辈。cNt28资讯网——每日最新资讯28at.com

为了更好地理解 pnpm 的优势,我们从包管理工具的历史开始探索,从 npm2 开始的各个阶段。我们将看到 pnpm 如何通过技术创新解决历史遗留问题,并极大地提高性能和效率。接下来,深入了解 pnpm 的核心机制以及它如何改变开发者处理依赖管理的方式。cNt28资讯网——每日最新资讯28at.com

npm2

使用 Node 版本管理工具将 Node 版本降级到 4,然后 npm 版本将是 2.x。cNt28资讯网——每日最新资讯28at.com

cNt28资讯网——每日最新资讯28at.com

在一个目录中运行 npm init -y 快速创建一个 package.json 文件。cNt28资讯网——每日最新资讯28at.com

然后运行 npm install express,express 包及其依赖项将被下载:cNt28资讯网——每日最新资讯28at.com

cNt28资讯网——每日最新资讯28at.com

展开 express,它也有 node_modules:cNt28资讯网——每日最新资讯28at.com

cNt28资讯网——每日最新资讯28at.com

继续展开几层,每个依赖项都有自己的 node_modules:cNt28资讯网——每日最新资讯28at.com

cNt28资讯网——每日最新资讯28at.com

换句话说,npm2 的 node_modules 是嵌套的。cNt28资讯网——每日最新资讯28at.com

这正常吗?这有什么问题吗?cNt28资讯网——每日最新资讯28at.com

实际上,这确实有问题。多个包不可避免地具有共同的依赖项。当像这样嵌套时,相同的依赖项将被多次重复,占用了相对较大的磁盘空间。cNt28资讯网——每日最新资讯28at.com

这还不是最大的问题;致命的问题是 Windows 中文件路径的最大长度超过 260 个字符。像这样嵌套会超过 Windows 的路径长度限制。cNt28资讯网——每日最新资讯28at.com

在 npm 尚未解决这个问题时,社区出现了一个新的解决方案:yarncNt28资讯网——每日最新资讯28at.com

yarn

Yarn 如何解决重复依赖和过长嵌套路径的问题?cNt28资讯网——每日最新资讯28at.com

扁平化。所有依赖项不再逐层嵌套,而是全部处于同一层级,因此不再存在重复依赖或路径过长的问题。cNt28资讯网——每日最新资讯28at.com

我们删除 node_modules,使用 Yarn 重新安装并执行 yarn add express:cNt28资讯网——每日最新资讯28at.com

此时,node_modules 看起来像这样:cNt28资讯网——每日最新资讯28at.com

cNt28资讯网——每日最新资讯28at.com

所有依赖项都在同一层级,大多数包在其下没有第二层 node_modules:cNt28资讯网——每日最新资讯28at.com

cNt28资讯网——每日最新资讯28at.com

当然,有些包仍然有 node_modules,例如这个:cNt28资讯网——每日最新资讯28at.com

cNt28资讯网——每日最新资讯28at.com

为什么仍然存在嵌套?cNt28资讯网——每日最新资讯28at.com

因为一个包可能有多个版本,并且只有一个版本可以被提升。因此,当遇到不同版本的同一包时,仍然使用嵌套。cNt28资讯网——每日最新资讯28at.com

npm 升级到版本 3 后,也采用了这种扁平化解决方案,与 yarn 非常相似:cNt28资讯网——每日最新资讯28at.com

cNt28资讯网——每日最新资讯28at.com

当然,yarn 也实现了 yarn.lock 的功能来锁定依赖项版本,但 npm 也实现了这一点。cNt28资讯网——每日最新资讯28at.com

yarn 和 npm 都采用了扁平化解决方案。这种方法没有问题吗?cNt28资讯网——每日最新资讯28at.com

不完全是,扁平化解决方案也有自己的问题。cNt28资讯网——每日最新资讯28at.com

主要问题是幽灵依赖,这意味着在代码中可以引入未在依赖项部分声明的依赖项。cNt28资讯网——每日最新资讯28at.com

这很容易理解,因为一切都是扁平化的,所以可以找到依赖项的依赖项。cNt28资讯网——每日最新资讯28at.com

然而,这带来了风险,因为没有明确的依赖声明,如果有一天另一个包不再依赖于那个包,你的代码将无法运行,因为依赖于它,但现在没有安装。cNt28资讯网——每日最新资讯28at.com

这就是幽灵依赖的问题。cNt28资讯网——每日最新资讯28at.com

另一个问题是多个版本的依赖项,如上所述。只有一个版本会被提升,而其他版本则会重复多次,导致磁盘空间浪费。cNt28资讯网——每日最新资讯28at.com

社区有解决这两个问题的想法吗?cNt28资讯网——每日最新资讯28at.com

当然有!这就是为什么引入了 pnpm。cNt28资讯网——每日最新资讯28at.com

pnpm

回顾一下,为什么 npm3 和 yarn 扁平化 node_modules?不就是因为相同的依赖项会被多次重复,并且长路径可能会在 Windows 上引发问题吗?cNt28资讯网——每日最新资讯28at.com

如果我们不重复它们,而是使用链接呢?cNt28资讯网——每日最新资讯28at.com

首先,介绍链接。它是操作系统提供的软链接和硬链接。硬链接是同一个文件的不同引用,而符号链接会创建一个新文件,其内容指向另一个路径。当然,这两种链接的使用方式是类似的。cNt28资讯网——每日最新资讯28at.com

如果不复制文件,而是将 npm 包的唯一副本存储在全局仓库中,并将其他位置链接到它呢?cNt28资讯网——每日最新资讯28at.com

这样就不会因多次复制而浪费磁盘空间,也不会有路径过长的问题。路径长度的限制本质上意味着不应该有太深的目录层级;现在所有位置的目录是链接在一起的,而不是在同一个目录中,因此没有长度限制。cNt28资讯网——每日最新资讯28at.com

是的,pnpm 通过这种方法实现了这一点。cNt28资讯网——每日最新资讯28at.com

再次删除 node_modules,然后使用 pnpm 通过运行 pnpm install 重新安装。cNt28资讯网——每日最新资讯28at.com

你会注意到它打印出这样一句话:cNt28资讯网——每日最新资讯28at.com

cNt28资讯网——每日最新资讯28at.com

软件包从全局存储硬链接到虚拟存储,这里的虚拟存储是 node_modules/.pnpm。cNt28资讯网——每日最新资讯28at.com

我们打开 node_modules 看一看。cNt28资讯网——每日最新资讯28at.com

cNt28资讯网——每日最新资讯28at.com

确实不是扁平的,依赖 express,所以在 node_modules 下只有 express,没有任何幽灵依赖。cNt28资讯网——每日最新资讯28at.com

展开 .pnpm 看看:cNt28资讯网——每日最新资讯28at.com

cNt28资讯网——每日最新资讯28at.com

所有依赖项都在这里解决,全部从全局仓库直接链接过来,并通过符号链接组织包之间的依赖关系。cNt28资讯网——每日最新资讯28at.com

例如,.pnpm 下的 express,都是符号链接。cNt28资讯网——每日最新资讯28at.com

cNt28资讯网——每日最新资讯28at.com

换句话说,所有依赖项都是从全局仓库硬链接到 node_modules/.pnpm,然后它们通过符号链接相互依赖。cNt28资讯网——每日最新资讯28at.com

官方提供了一个示意图,结合起来看很清楚:cNt28资讯网——每日最新资讯28at.com

cNt28资讯网——每日最新资讯28at.com

这就是 pnpm 的实现原理。cNt28资讯网——每日最新资讯28at.com

pnpm 的优越性

首先,最大的优势是节省磁盘空间。包只在全局保存一份,其余的都是符号链接或硬链接。这节省了大量磁盘空间。cNt28资讯网——每日最新资讯28at.com

其次,它很快,因为它使用链接而不是复制,这自然使它更快。cNt28资讯网——每日最新资讯28at.com

这些也是它所宣称的优势:cNt28资讯网——每日最新资讯28at.com

cNt28资讯网——每日最新资讯28at.com

相比 npm2,优势在于不会多次重复相同的依赖项。cNt28资讯网——每日最新资讯28at.com

相比 yarn 和 npm3+,没有幽灵依赖,也没有未提升依赖项的重复问题。cNt28资讯网——每日最新资讯28at.com

这已经足够优秀,可以说是对 yarn 和 npm 的一次打击。cNt28资讯网——每日最新资讯28at.com

结语

最近,pnpm 频繁被提及,可以说是当下的趋势。在本文中,我们总结了其受欢迎的原因:cNt28资讯网——每日最新资讯28at.com

npm2 以嵌套方式管理 node_modules,导致多次重复依赖项的问题。cNt28资讯网——每日最新资讯28at.com

npm3+ 和 yarn 通过扁平化方式管理 node_modules,解决了嵌套方式的一些问题,但引入了幽灵依赖的问题。此外,同名包只有一个版本被提升,而其他版本仍会重复。cNt28资讯网——每日最新资讯28at.com

pnpm 通过不复制文件,而是从全局仓库硬链接到 node_modules/.pnpm,并通过符号链接组织依赖关系,解决了这些问题。cNt28资讯网——每日最新资讯28at.com

这不仅节省了磁盘空间,消除了幽灵依赖问题,还加快了安装速度。从机械角度来看,pnpm 超越了 npm 和 yarn。cNt28资讯网——每日最新资讯28at.com

通过这种对 npm 和 yarn 的创新方法,pnpm 正在通过简化依赖管理的方式产生影响。cNt28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-95167-0.htmlPnpm:包管理的新星,如何颠覆 Npm 和 Yarn

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Git是如何工作的?你知道吗?

下一篇: 实现一个完美的高并发订单减库存方案

标签:
  • 热门焦点
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 中兴AX5400Pro+上手体验:再升级 双2.5G网口+USB 3.0这次全都有

    2021年11月的时候,中兴先后发布了两款路由器产品,中兴AX5400和中兴AX5400 Pro,从产品命名上就不难看出这是隶属于同一系列的,但在外观设计上这两款产品可以说是完全没一点关系
  • 石头智能洗地机A10 Plus体验:双向自清洁治好了我的懒癌

    一、前言和介绍专为家庭请假懒人而生的石头科技在近日又带来了自己的全新旗舰新品,石头智能洗地机A10 Plus。从这个产品名上就不难看出,这次石头推出的并不是常见的扫地机器
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
  • 微软发布Windows 11新版 引入全新任务栏状态

    近日,微软发布了Windows 11新版,而Build 22563更新主要引入了几周前曝光的平板模式任务栏等,系统更流畅了。更新中,Windows 11加入了专门针对平板优化的任务栏
  • 荣耀Magic4 至臻版 首创智慧隐私通话 强劲影音系统

    2022年第一季度临近尾声,在该季度内,许多品牌陆续发布自己的最新产品,让大家从全新的角度来了解当今的手机技术。手机是电子设备中,更新迭代十分迅速的一款产品,基
Top