一、pnpm

Fast, disk space efficient package manager

官网对比图:

特点:

1、高效利用磁盘空间: 使用基于内容寻址的文件系统来存储磁盘上所有的文件,更新增量部分

  • 如果你用到了某依赖项的不同版本,只会将不同版本间有差异的文件添加到仓库。 例如,如果某个包有100个文件,而它的新版本只改变了其中1个文件。那么 pnpm update 时只会向存储中心额外添加1个新文件,而不会因为仅仅一个文件的改变复制整新版本包的内容。
  • 所有文件都会存储在硬盘上的某一位置。 当软件包被被安装时,包里的文件会硬链接到这一位置,而不会占用额外的磁盘空间。 这允许你跨项目地共享同一版本的依赖。

2、速度快

3、目录扁平化,实际非扁平化:通过软链连接对应版本号的包依赖,包本身和依赖同级放在node_modules里

二、npm(3版本之后)

1、安装机制:

查询node_modules中是否存在;存在,不继续安装;不存在:

registry查询,下载(~/.npm),解压(node_modules)

2、原理:

(1) 执行自身preinstall

(2)确定首层依赖块(dependencies 和devDependencies )

(3)获取模块(递归过程。 确定版本(package-lock/仓库)=》获取模块实体(缓存/仓库)=》查找该模块依赖)

(4)模块扁平化(看是否是兼容版本,重复模块丢弃)

(5)安装模块(更新工程中的node_modules,执行模块中的生命周期函数)

(6)执行工程自身生命周期

3、存在问题:

  1. 依赖结构的不确定性。(package-lock.json(5之后)和yarn.lock诞生的原因)(遇到不同版本的包,先声明的包会扁平化到根目录,后声明的包会嵌套到包的node_modules里)
  2. 扁平化算法本身的复杂性很高,耗时较长。
  3. 项目中仍然可以非法访问没有声明过依赖的包(a依赖b,b依赖c;由于依赖提升c被装到了a的node_modules里面,a中可以。解决方案:dependency-check)

三、yarn

  1. 将依赖包的版本区间解析为某个具体的版本号
  2. 下载对应版本依赖的 tar 包到本地离线镜像
  3. 将依赖从离线镜像解压到本地缓存
  4. 将依赖从缓存拷贝到当前目录的 node_modules 目录

pnp:Plug'n'Play 是 2018 年 9 月推出的另一种安装策略,yarn 2.0

在第4步时,在.pnp.js文件中记录下该依赖在缓存中的位置(包括版本,关联)(这样就避免了大量的I/O操作同时也不会有node_modules生成)

前端包管理工具浅谈(pnpm,npm,yarn)相关推荐

  1. 前端包管理工具 yarn

    yarn 是一个  与 npm 类似的 前端包管理工具 安装 windows  要去官网下载 (一定要去官网下载 .mis 文件进行安装)   用npm 或者 cnpm  也能安装 但是这种安装 有缺 ...

  2. 前端包管理器的领头大哥——npm

    背景 CommonJS 的出现,使 node 环境下的 JS 代码可以用模块更加细粒度的划分.一个类.一个函数.一个对象.一个配置等等均可以作为模块,这种细粒度的划分,是开发大型应用的基石. 为了解决 ...

  3. 前端包管理工具Bower的常用命令

    Bower 是一款前端包管理器,目前还在维护中,但推荐使用npm和yarn的生态. 官方通告: -psst! While Bower is maintained, we recommend using ...

  4. npm前端包管理工具简介---npm工作笔记001

    之前我们都是把js文件下载下来以后,都是自己放到我们本地使用,后来我们就把js文件,使用CDN来实现, 也就是,我们引入js文件的时候,不在从本地进行引入了,我们直接引入网络上的,一个CDN上的, 比 ...

  5. 前端工程化-包管理工具npm-yarn-cnpm-pnpm详细介绍以及如何选择

    文章目录 包管理工具详解 npm包管理工具 1.代码共享的方案 2.npm包管理工具介绍 3.npm的配置文件 常见配置文件 常见配置文件属性 版本号的说明 4.npm install npm ins ...

  6. NPM:nodejs官方包管理工具的简介、安装、使用方法之详细攻略

    NPM:nodejs官方包管理工具的简介.安装.使用方法之详细攻略 目录 NPM之nodejs官方包管理工具的简介 NPM之nodejs官方包管理工具的安装 NPM之nodejs官方包管理工具的使用方 ...

  7. Nodejs入门 (四) 包管理工具(npm、cnpm、yarn、nvm)

    目录 一.什么是包管理工具? 二.npm的使用 1.初始化 2.搜索包 3.下载安装包 4.安装包的使用 5.全局安装 6.安装包依赖 7.安装指定版本的包 8.删除依赖 9.配置命令别名 10.np ...

  8. linux高级包管理工具,5 个给 Linux 新手的最佳包管理器

    原标题:5 个给 Linux 新手的最佳包管理器 一个 Linux 新用户应该知道他或她的进步源自于对 Linux 发行版的使用,而 Linux 发行版有好几种,并以不同的方式管理软件包. 在 Lin ...

  9. linux更换包管理工具,技术|5 个给 Linux 新手的最佳包管理器

    一个 Linux 新用户应该知道他或她的进步源自于对 Linux 发行版的使用,而 Linux 发行版有好几种,并以不同的方式管理软件包. 在 Linux 中,包管理器非常重要,知道如何使用多种包管理 ...

最新文章

  1. [leetcode]Search in Rotated Sorted Array @ Python
  2. photoshop切片的取消操作
  3. Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches
  4. SQL Server 固定角色
  5. Google C++编程风格指南(一):背景
  6. Win7matlab7.0安装教程,Win7下MATLAB7.0安装教程
  7. 25. object类中的一些方法分析
  8. 一个简单的c# 贪吃蛇程序
  9. Dataframe两个表格合并
  10. 文本到图像模型,如何快速生成高质量图片? #Google Muse AI
  11. springboot前后端分离 前端请求图片问题
  12. 计算机知识竞赛拉赞助,知识竞赛活动方案策划书
  13. 拿铁DHT-PHEV座舱智能程度体验笔记(超详细)
  14. 深度学习评估指标之目标检测——(yolov5 可视化训练结果以及result.txt解析)
  15. ettercap无线局域网内DNS欺骗实例
  16. 2022年G2电站锅炉司炉考试题模拟考试题库模拟考试平台操作
  17. 如何让百度搜索到我的博客或者网站
  18. 如安在Linux的把持琐屑下应用假造光驱
  19. CSS 设置p标签首字母格式
  20. 一次因时区引发的血案

热门文章

  1. mysql免安装 win10_win10安装免安装版的mysql5.7
  2. 用女神Nalu的黄金秀发做毛笔––毛笔书法实时模拟技术的终极解决方案
  3. 如何提升软件测试回归测试,如何更高效的进行软件回归测试?
  4. 最近很火的文字转语音助手
  5. 多线程调用static方法线程安全问题
  6. 您的请求带有不合法参数,已被管理员设置拦截
  7. A Survey of Simultaneous Localization and Mapping
  8. php codeigniter安全,CodeIgniter安全相关设置汇总
  9. 计算机教学设计与反思,信息技术应用 用计算机画函数图象教学设计与反思
  10. 姜奇平:去伪存真看云计算