首页 > 其他分享 >npm,cnpm,yarn,pnmp之间的区别

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

时间:2022-12-20 00:22:56浏览次数:45  
标签:npm 依赖 cnpm package 版本号 yarn pnpm

 

一、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

标签:npm,依赖,cnpm,package,版本号,yarn,pnpm
From: https://www.cnblogs.com/onesea/p/16993417.html

相关文章

  • npm 错误-ERRNO-4080
    问题描述:不知什么时候,突然install时npm报错解决方法1.权限问题个人问题是因为权限不够,只需要把node.js文件夹的权限全部打开即可2.由于网络不稳定导致npm包不完整由......
  • NPM 支持更高的 ReactJS 版本
     couldnotresolvedependency:npmerr!peerreact@“^16.8.0||^17.0.0“from@material-ui/[email protected] 问题在执行npminstall时看到以下错误:couldnot......
  • 如何获取 Visual Studio 项目中的 nuget 包引用列表,以及在 npm 包的引用列表
    nuget1、在VisualStudio中打开对应的解决方案;2、打开程序包管理控制台;3、执行命令:Get-Package|Select-Object-Property{$_.Id+","+$_.Version}4、即可得到以......
  • yarn add gulp —dev报错
    yarnaddgulp—dev报错这是粪坑里找金针菇的感觉吗?PSE:\Downloads\Compressed\zce-gulp-demo-master>yarnaddgulp--devyarnaddv1.22.19infoNolockfilefoun......
  • 安装cnpm
    1、安装node.js  检查node,npm是否安装好:node-vnpm-v2、淘宝镜像安装cnpmnpminstall-gcnpm-registry=https://registry.npm.taobao.org ......
  • 依赖管理的对比(npm,yarn,pnpm)
    近期遇到了这么一个问题,在开发过程中,针对于npm/yarn/pnpm的选择,各自的对比是怎样的,查了一些资料,总结如下:性能:pnpm ≈yarn>npm功能对比:pnpm ≈yarn>npm内......
  • npm问题记录
    npmERR!codeETIMEOUT设置代理关闭:npmconfigsetproxyfalse清除缓存:npmcacheclean若报错则:npmcacheclean--force降级npm版本:[email protected]设置淘宝镜......
  • windows安装npm教程(nodejs)
    1、在使用之前,先类掌握3个东西,明白它们是用来干什么的:npm: nodejs下的包管理器。webpack:它主要用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源作相应......
  • 前端开发系列079-Node篇之npm+
    title:'前端开发系列079-Node篇之npm+'tags:-Node系列categories:[]date:2018-07-2816:21:13本文介绍NPM系列核心工具(npm、nrm、npx和nvm)的基本使用和常用......
  • 前端开发系列078-Node篇之npm
    title:'前端开发系列078-Node篇之npm'tags:-Node系列categories:[]date:2018-07-2523:21:13本文输出Node中和包管理有关的基本内容,即npm的使用。一、简单介......