前端包管理工具浅谈(pnpm,npm,yarn)
一、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、存在问题:
- 依赖结构的不确定性。(package-lock.json(5之后)和yarn.lock诞生的原因)(遇到不同版本的包,先声明的包会扁平化到根目录,后声明的包会嵌套到包的node_modules里)
- 扁平化算法本身的复杂性很高,耗时较长。
- 项目中仍然可以非法访问没有声明过依赖的包(a依赖b,b依赖c;由于依赖提升c被装到了a的node_modules里面,a中可以。解决方案:dependency-check)
三、yarn
- 将依赖包的版本区间解析为某个具体的版本号
- 下载对应版本依赖的 tar 包到本地离线镜像
- 将依赖从离线镜像解压到本地缓存
- 将依赖从缓存拷贝到当前目录的 node_modules 目录
pnp:Plug'n'Play 是 2018 年 9 月推出的另一种安装策略,yarn 2.0
在第4步时,在.pnp.js文件中记录下该依赖在缓存中的位置(包括版本,关联)(这样就避免了大量的I/O操作同时也不会有node_modules生成)
前端包管理工具浅谈(pnpm,npm,yarn)相关推荐
- 前端包管理工具 yarn
yarn 是一个 与 npm 类似的 前端包管理工具 安装 windows 要去官网下载 (一定要去官网下载 .mis 文件进行安装) 用npm 或者 cnpm 也能安装 但是这种安装 有缺 ...
- 前端包管理器的领头大哥——npm
背景 CommonJS 的出现,使 node 环境下的 JS 代码可以用模块更加细粒度的划分.一个类.一个函数.一个对象.一个配置等等均可以作为模块,这种细粒度的划分,是开发大型应用的基石. 为了解决 ...
- 前端包管理工具Bower的常用命令
Bower 是一款前端包管理器,目前还在维护中,但推荐使用npm和yarn的生态. 官方通告: -psst! While Bower is maintained, we recommend using ...
- npm前端包管理工具简介---npm工作笔记001
之前我们都是把js文件下载下来以后,都是自己放到我们本地使用,后来我们就把js文件,使用CDN来实现, 也就是,我们引入js文件的时候,不在从本地进行引入了,我们直接引入网络上的,一个CDN上的, 比 ...
- 前端工程化-包管理工具npm-yarn-cnpm-pnpm详细介绍以及如何选择
文章目录 包管理工具详解 npm包管理工具 1.代码共享的方案 2.npm包管理工具介绍 3.npm的配置文件 常见配置文件 常见配置文件属性 版本号的说明 4.npm install npm ins ...
- NPM:nodejs官方包管理工具的简介、安装、使用方法之详细攻略
NPM:nodejs官方包管理工具的简介.安装.使用方法之详细攻略 目录 NPM之nodejs官方包管理工具的简介 NPM之nodejs官方包管理工具的安装 NPM之nodejs官方包管理工具的使用方 ...
- Nodejs入门 (四) 包管理工具(npm、cnpm、yarn、nvm)
目录 一.什么是包管理工具? 二.npm的使用 1.初始化 2.搜索包 3.下载安装包 4.安装包的使用 5.全局安装 6.安装包依赖 7.安装指定版本的包 8.删除依赖 9.配置命令别名 10.np ...
- linux高级包管理工具,5 个给 Linux 新手的最佳包管理器
原标题:5 个给 Linux 新手的最佳包管理器 一个 Linux 新用户应该知道他或她的进步源自于对 Linux 发行版的使用,而 Linux 发行版有好几种,并以不同的方式管理软件包. 在 Lin ...
- linux更换包管理工具,技术|5 个给 Linux 新手的最佳包管理器
一个 Linux 新用户应该知道他或她的进步源自于对 Linux 发行版的使用,而 Linux 发行版有好几种,并以不同的方式管理软件包. 在 Linux 中,包管理器非常重要,知道如何使用多种包管理 ...
最新文章
- [leetcode]Search in Rotated Sorted Array @ Python
- photoshop切片的取消操作
- Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches
- SQL Server 固定角色
- Google C++编程风格指南(一):背景
- Win7matlab7.0安装教程,Win7下MATLAB7.0安装教程
- 25. object类中的一些方法分析
- 一个简单的c# 贪吃蛇程序
- Dataframe两个表格合并
- 文本到图像模型,如何快速生成高质量图片? #Google Muse AI
- springboot前后端分离 前端请求图片问题
- 计算机知识竞赛拉赞助,知识竞赛活动方案策划书
- 拿铁DHT-PHEV座舱智能程度体验笔记(超详细)
- 深度学习评估指标之目标检测——(yolov5 可视化训练结果以及result.txt解析)
- ettercap无线局域网内DNS欺骗实例
- 2022年G2电站锅炉司炉考试题模拟考试题库模拟考试平台操作
- 如何让百度搜索到我的博客或者网站
- 如安在Linux的把持琐屑下应用假造光驱
- CSS 设置p标签首字母格式
- 一次因时区引发的血案
热门文章
- mysql免安装 win10_win10安装免安装版的mysql5.7
- 用女神Nalu的黄金秀发做毛笔––毛笔书法实时模拟技术的终极解决方案
- 如何提升软件测试回归测试,如何更高效的进行软件回归测试?
- 最近很火的文字转语音助手
- 多线程调用static方法线程安全问题
- 您的请求带有不合法参数,已被管理员设置拦截
- A Survey of Simultaneous Localization and Mapping
- php codeigniter安全,CodeIgniter安全相关设置汇总
- 计算机教学设计与反思,信息技术应用 用计算机画函数图象教学设计与反思
- 姜奇平:去伪存真看云计算