npm,cnpm,yarn,pnmp之间的区别

2023-11-20

一、npm

1、由于版本号的影响,所以会造成版本不统一的情况

给定一个版本号:主版本号.次版本号.补丁版本号, 以下这三种情况需要增加相应的版本号:

主版本号: 当API发生改变,并与之前的版本不兼容的时候

次版本号: 当增加了功能,但是向后兼容的时候

补丁版本号:当做了向后兼容的缺陷修复的时候

package.json某依赖的版本号如下:

“5.0.3”, // 安装指定的5.0.3版本
“~5.0.3”, // 安装5.0.X中最新的版本
“^5.0.3” // 安装5.X.X中最新的版本

因此不同的开发人员使用相同的package.json文件,在他们自己的机器上可能会安装同一个库的不同版本,这样就会存在潜在的难以调试的错误。

2、由于npm库存在嵌套依赖的关系,会增加无法匹配相应版本的概率


每一个包,会有嵌套其他的依赖包,如果两个包中存在同一个依赖包,但两者需要的依赖包的版本号不同,就会出现包的版本匹配问题。

3、npm 的输出信息比较冗长


安装的时候,包会在同一时间下载和安装,中途某个时候,一个包出了错误,但是 npm 会继续下载和安装包。因为 npm 会把所有的日志输出到终端,有关错误包的错误信息就会在一大堆 npm 打印的警告中丢失掉,所以你很难找到真正出错的包和原因。

4、下载速度慢


npm 2会安装每一个包所依赖的所有依赖项,有一个项目,A依赖B,B依赖C,依赖树如下:

node_modules
- package-A
-- node_modules
--- package-B
----- node_modules
------ package-C
-------- some-really-really-really-long-file-name-in-package-c.js

这个结构可能会很长。这对于基于Unix的操作系统来说只不过是一个小烦恼,但对于Windows来说却是个破坏性的东西,因为有很多程序无法处理超过260个字符的文件路径名。

npm 3采用了扁平依赖关系树来解决这个问题,所以我们的3个项目结构现在看起来如下所示:

node_modules
- package-A
- package-B
- package-C
-- some-file-name-in-package-c.js

这样,一个原来很长的文件路径名就从./node_modules/package-A/node_modules/package-B/node-modules/some-file-name-in-package-c.js变成了/node_modules/some-file-name-in-package-c.js。

这种方法的缺点是,npm必须首先遍历所有的项目依赖关系,然后再决定如何生成扁平的node_modules目录结构。npm必须为所有使用到的模块构建一个完整的依赖关系树,这是一个耗时的操作,是npm安装速度慢的一个很重要的原因。

同时,由于npm是从国外服务器下载,由于网络原因,速度会很慢。

二、cnpm


相对于 npm 而言, cnpm 的下载速度要快很多。
cnpm 更快,是因为淘宝将国外服务器的内容,先请求到了自己国内的服务器上,这样我们使用cnpm的时候下载的依赖就是从国内服务器上下载过来的,速度相对快很多。

官网上说:“这是一个完整 npmjs.org镜像,你可以用此代替官方版本,同步频率目前为 10分钟 一次以保证尽量与官方服务同步。”

三、yarn

yarn的优点:
1、yarn离线模式
如果你以前安装过某个包,再次安装时可以在没有任何互联网连接的情况下进行。

2、安装版本统一
yarn 有锁定文件(lock file) 记录了确切被安装模块的版本号,每次新增文件时,yarn会创建(或更新)yarn.lock这个文件,保证每次安装依赖时都是一样的模块版本。

3、扁平模式
将依赖包的不同版本归结为单个版本,以避免创建多个副本。
npm和yarn的命令对比

四、pnmp 

 一、概念

performant npm ,意味“高性能的 npm”。pnpm由npm/yarn衍生而来,解决了npm/yarn内部潜在的bug,极大的优化了性能,扩展了使用场景。被誉为“最先进的包管理工具”

二、特点:

速度快、节约磁盘空间、支持monorepo、安全性高

pnpm 相比较于 yarn/npm 这两个常用的包管理工具在性能上也有了极大的提升,根据目前官方提供的 benchmark 数据可以看出在一些综合场景下比 npm/yarn 快了大概两倍。

三、存储管理:

按内容寻址、采用symlink

四、依赖管理:

npm1、npm2采用递归管理,npm3、npm3+、yarn依赖扁平化管理消除依赖提升。

pnpm依赖策略:消除依赖提升、规范拓扑结构

五、安全
之前在使用 npm/yarn 的时候,由于 node_module 的扁平结构,如果 A 依赖 B, B 依赖 C,那么 A 当中是可以直接使用 C 的,但问题是 A 当中并没有声明 C 这个依赖。因此会出现这种非法访问的情况。 但 pnpm 自创了一套依赖管理方式,很好地解决了这个问题,保证了安全性。

六、安装:

npm i pnpm -g

七、查看版本信息: 

八、升级版本

pnpm add -g pnpm to update 

九、设置源: 

pnpm config get registry //查看源

pnpm config set registry https://registry.npmmirror.com //切换淘宝源 

十、安装项目依赖 

pnpm install

十一、运行项目

pnpm run dev 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

npm,cnpm,yarn,pnmp之间的区别 的相关文章

随机推荐

  • 根目录磁盘不足的解决方法

    报错 解决方法 1 关闭虚拟机 2 打开设置选项卡 3 点击硬盘 gt 扩展 输入你想设置的硬盘大小 3 在虚拟机中输入下方命令扩展分区 fdisk dev sda 输入命令如下图 注 这里提示设备或资源忙是正常的 并不是报错 需要稍等两分
  • No implementation found for void tv.danmaku.ijk.media.player.IjkMediaPlayer.native_profileEnd()

    2020 02 10 10 16 16 364 32284 32284 com zhuicha aitv E art No implementation found for void tv danmaku ijk media player
  • grep正则表达式后面的单引号和双引号的区别?

    单引号 是全引用 被单引号括起的内容不管是常量还是变量者不会发生替换 双引号 是部分引用 被双引号括起的内容常量还是常量 变量则会发生替换 替换成变量内容 一般常量用单引号 括起 如果含有变量则用双引号 括起 单引号与双引号的最大不同在于双
  • Linux_CentOS_6.5添加iptables记录(规则)

    1 关闭所有的 INPUT FORWARD OUTPUT 只对某些端口开放 下面是命令实现 iptables P INPUT DROP iptables P FORWARD DROP iptables P OUTPUT DROP 再用命令
  • Less的语法及使用方法

    Less的语法及使用方法 1 变量 2 混合 3 嵌套 4 运算 5 函数 6 作用域 7 注释 8 导入 9 映射 1 变量 我们可以先看看别的里面创建变量和Less里面创建变量有什么不同 在JavaScript里面创建变量有两种方式 一
  • 你知道研发的文档有多少种吗?

    这篇继续讲文档能力 文档能力是研发人员必备技能 有时候涉及到的文字沟通 比如邮件沟通等 都需要文档加以辅助说明 那么这时就需要好好设计文档的内容了 有些同学文档内容写的很随意 一眼看上去不知道在讲什么 这时就要用到文档的结构了 你设计的结构
  • android recovery 系统代码分析【精】

    转自 http blog csdn net andyhuabing article details 9226569 http blog csdn net andyhuabing article details 9248713 最近做Reco
  • 超级详细Tcpdump 的用法

    1 抓取回环网口的包 tcpdump i lo 2 防止包截断 tcpdump s0 3 以数字显示主机及端口 tcpdump n 第一种是关于类型的关键字 主要包括host net port 例如 host 210 27 48 2 指明
  • 小车测速模块使用介绍

    测速模块 产品特点 1 使用进口槽型光耦传感器 槽宽度5mm 2 有输出状态指示灯 输出高电平灯灭 输出低电平灯亮 3 有遮挡 输出高电平 无遮挡 输出低电平 4 比较器输出 信号干净 波形好 驱动能力强 超过15mA 5 工作电压3 3V
  • Elasticsearch之映射(mapping)。

    索引中每个文档都有一个类型 type 每个类型拥有自己的映射 mapping 或者模式定义 schema definition 一个映射定义了字段类型 每个字段的数据类型 以及字段被Elasticsearch处理的方式 映射还用于设置关联到
  • 基数排序代码实现

    详情请看排序总结 传送门 https blog csdn net m0 52711790 article details 121914543 基数排序的知识点我就不贴出来 相信都能搜到对应概念解释 下面就直接上代码 代码解释其实也很清晰了
  • Python之tkinter图形界面设计学习二

    图形用户界面 简称GUI 是指采用图形方式显示的计算机操作用户界面 与计算机的命令行界面相比 图形界面对于用户的操作显得更加直观和简便 一 tkinter模块 tkinter是Python的内置GUI模块 使用tkinter可以快速地创建G
  • H5查看pdf文件(pdfh5)

    我用的是 pdfh5 来查看的H5中的pdf文件 使用 pdfh5 插件来打开 pdf文件 下面是两种使用方法 方法一 二都可以 但是我在使用方法二时有卡顿现象 可能是因为未开启懒加载 方法二中的 on 可以打印出来错误信息 使用方法 1
  • java实现图片文字识别的两种方法

    一 使用tesseract ocr 1 https github com tesseract ocr tesseract wiki上下载安装包安装和简体中文训练文件 window64位安装包 tesseract ocr w64 setup
  • debian查看ip地址命令_设备调试、维护最实用网络命令

    ping命令 ping是个使用频率极高的实用程序 主要用于确定网络的连通性 这对确定网络是否正确连接 以及网络连接的状况十分有用 简单的说 ping就是一个测试程序 如果ping运行正确 大体上就可以排除网络访问层 网卡 Modem的输入输
  • 期货ctp基础知识(合约,开仓,平仓,做多,做空,保证金,手续费)

    期货ctp教程地址 期货ctp教程 合约 期货买卖的是合约 股票买卖的是股票 做多和做空 2 1 做多 你就是买入看涨 所以买这个动作对应的指令就是 买开仓 当你赚了或者止损的时候 就要把合约卖掉 对应的指令就是 卖平仓 2 2 做空 你先
  • LabVIEW扫描成像或同步模拟电压生成和数据采集

    大量测量技术涉及探头扫描 同时测量物理量 例如 所有扫描成像方法都是这种情况 因此 数据采集需要高采集率 以及探头控制和测量之间的精确同步 GPScan VI 程序是用于控制 National Instruments 高速数据采集板的通用
  • 类型System.Double的对象无法转换为类型System.Single

    float gt System Single 单精度浮点型 占 4 个字节 double gt System Double 双精度浮点型 占 8 个字节 http msdn microsoft com zh cn library Syste
  • Linux命令(查看目录和切换目录)

    1 查看目录命令 ls 用法 ls 选项 目录名 案例 查看 usr下的所有文件 ls a usr 选项 a显示所有文件包含隐藏文件 l显示长文件信息 2 切换目录命令 cd change directory 用法 cd 目录名 案例 从当
  • npm,cnpm,yarn,pnmp之间的区别

    一 npm 1 由于版本号的影响 所以会造成版本不统一的情况 给定一个版本号 主版本号 次版本号 补丁版本号 以下这三种情况需要增加相应的版本号 主版本号 当API发生改变 并与之前的版本不兼容的时候 次版本号 当增加了功能 但是向后兼容的