我是靠谱客的博主 沉默水池,最近开发中收集的这篇文章主要介绍为什么说pnpm是最先进的包管理工具?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.首先看一下pnpm的兄弟们(npm、yarn)产生的问题痛点:

主要介绍一下两个问题: 幽灵依赖和依赖分身

在这里插入图片描述

幽灵依赖 Phatom

A “phantom dependency” occurs when a project uses a package that is not defined in its package.json file.

项目中使用未在package.json中定义的包时,这个包就是幽灵依赖。

产生原因:

由于npm(v3+)、yarn等包管理工具会将安装的node_module包进行扁平化结构的处理,即将所有依赖与其的依赖展开在一个层级,即根目录,这样就使得在代码中你不仅可以引用package.json中的依赖,也可以引用其所依赖的部分。

说起来有点拗口,举个例子。

假设: 引入依赖a,a依赖又依赖于b,逻辑上则结构就应该是

> -node_module/a
> -node_module/a/node_module/b

但是在扁平化展开后则变成了

>  -node_module/a
>  -node_module/b

此时我们的package.json中只有a,却可以引用b

依赖分身 Doppelgangers

由于管理方式存在的弊端,刚刚我们简述了一下什么是幽灵依赖。
依赖分身问题可以说是对于幽灵依赖的继续延申,在我们把下层的依赖提到根目录的时候,其实理想化了一个因素:就是下层依赖在项目中是唯一存在的。

举个例子,当出现重复时:

> -node_module/a
> -node_module/a/node_module/b@1.0.0
> -node_module/c
> -node_module/c/node_module/b@2.0.0

这时,依赖a和c分别依赖b的不同版本。
不论此刻提升@1.0.0的版本到根目录层级还是提升@2.0.0的版本到根目录层级,都会出现一个问题,将出现一个重复的依赖拷贝,这个依赖拷贝就叫作:依赖分身。

2.pnpm可以解决吗?

官方文档:https://pnpm.io/zh

创建非扁平化的node_module文件夹

在这里插入图片描述

在pnpm创建非扁平化的结构过程中,这里出现了两种箭头指示:

  • Hard Link
  • Symbolic Link

什么是Hard Link?

字面意思:硬链接

hard link 使得用户可以通过不同的路径引用方式去找到某个文件

可以看官方文档中的图片,链接指向的都是.pnpm store

pnpm在这里存放了所有依赖的Hard Links,每个依赖可以理解为只存在一份,且在store中。

什么是Symbolic Link?

字面意思:符号链接

可以看作为我们常规操作的快捷方式,当其他依赖需要相同依赖的时候,采用符号链接而不需重新下载。

3.功能比较

pnpm不仅解决了以上常规包管理工具的痛点

我们可以看一下下图是三者的功能比较:
在这里插入图片描述

最后

以上就是沉默水池为你收集整理的为什么说pnpm是最先进的包管理工具?的全部内容,希望文章能够帮你解决为什么说pnpm是最先进的包管理工具?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部