npm是什么?优缺点又是什么?

yarn和npm一样,都是包管理工具,那么他们两者的区别到底是什么呢,我们应该使用哪一个呢

下面我们就来详细看下,它们分别是什么

一.NPM

npm是Node.js能够如此成功的主要原因之一

npm是围绕着语义版本控制的思想而设计的,下面是从他们的网站摘过来的:

给定一个版本号:主版本号.次版本号.补丁版本号

  • 主版本号: 当API发生改变,并与之前的版本不兼容的时候
  • 次版本号: 当增加了功能,但是向后兼容的时候
  • 补丁版本号: 当做了向后兼容的缺陷修复的时候 npm使用一个名为package.json的文件,用户可以通过npm install --save命令把项目里所有的依赖项保存在这个文件里

下图是package.json中的某依赖的版本号:

复制代码
"5.0.3", "~5.0.3", "^5.0.3"

"5.0.3"表示安装指定的5.0.3版本

"~5.0.3"表示安装5.0.X中最新的版本

"^5.0.3"表示安装5.X.X中最新的版本

这就比较恶心,所以常常会出现同一个项目,有的同事运行可以,但是有的同事会由于安装的版本不一致出现很诡异的bug,也就会出现我们经常听到的一句话:"在我的电脑上可以........."

而且很多npm库都严重依赖于其他npm库,这会导致嵌套依赖关系,并增加无法匹配相应版本的概率,从而出错

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

还有就是,如果我们之前npm装过了依赖,但是后面又执行npm install ,那么又会再从网络上重新下载依赖,导致变得非常慢。

综上所述,来总结一下npm的缺点:

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

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

3.npm 的输出信息比较冗长。在执行 npm install 的时候,命令行里会不断地打印出所有被安装上的依赖,不够简洁

4.重复安装的时候,不直接从缓存中获取,还需要从网络上下载

5.依赖是逐个进行下载的,前一个下载完,才可以进行下一个的下载,所以导致下载速度慢

相关推荐
天若有情67312 小时前
XiangJsonCraft v1.2.0重大更新解读:本地配置优先+全量容错,JSON解耦开发体验再升级
前端·javascript·npm·json·xiangjsoncraft
有个人神神叨叨15 小时前
pnpm cnpm npm 对比
前端·arcgis·npm
有个人神神叨叨17 小时前
node、npm 和 npx 的关系
前端·arcgis·npm
虹科网络安全2 天前
艾体宝新闻 | NPM 生态系统陷入困境:自我传播恶意软件在大规模供应链攻击中感染了 187 个软件包
前端·npm·node.js
摇滚侠2 天前
PNPM 包管理工具和 NPM 包管理工具
vscode·npm·node.js·pnpm
147API2 天前
改名后的24小时:npm 包抢注如何劫持开源项目供应链
前端·npm·node.js
抵梦2 天前
NPM、CNPM、PNPM:Node.js 依赖工具对比与选择
前端·npm·node.js
摇滚侠2 天前
npm 设置了阿里云镜像,然后全局安装了 pnpm,pnpm 还需要设置阿里云镜像吗
前端·阿里云·npm
-凌凌漆-3 天前
vscode运行npm报错,npm : 无法加载文件 xxxxx/npm.ps1,因为在此系统上禁止运行脚本。
ide·vscode·npm
*小雪5 天前
nvm的安装与管理和npm audit的报错解决
前端·npm·node.js