npm,yarn,cnpm 的区别

npm  是什么

npm(全称 Node Package Manager)是一个软件包管理系统,专门管理用 JavaScript 编写的软件包。npm 使用该npm install命令安装依赖项。依赖项是按顺序安装的,一个接一个,比较缓慢。

下载安装 node.js 会自动安装npm

yarn 是什么

yarn是由Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具。

yarn 也是一个 JavaScript 软件包,需要先使用 npm 进行安装。

安装yarn      nnpm install -g yarn

设置环境变量
我的电脑-->高级系统设置-->高级-->环境变量-->系统变量-->Path 双击-->新建(填入yarn安装地址)

C:\Users\wangxinyan\AppData\Roaming\npm\node_modules\yarn\bin  ( 我的yarn 的安装地址 )

cnpm 是什么

cnpm镜像又称淘宝镜像,你可以用此代替官方版本(只读),由于npmjs.org 服务器在国外,很多依赖包下载速度极慢,阿里为解决这个问题,把npm 官方包同步到国内的服务器中,供广大开发者使用,同步频率目前为 10分钟一次以保证尽量与官方服务同步。

安装cnpm     npm install -g cnpm --registry=https://registry.npm.taobao.org

什么是包管理器

包管理器是开发人员用来自动寻找、下载、安装、配置、升级和删除系统包的工具。 

为什么你需要一个软件包管理器?
假设没有软件包管理器。在这种情况下,你将不得不手动完成以下工作:

①.为你的项目找到所有正确的软件包
②.验证这些包是否有任何已知的漏洞
③.下载软件包
④.在适当的位置安装它们
⑤.跟踪所有软件包的最新更新
⑥.当有新的版本时,升级每个软件包
⑦.删除你不再需要的软件包
⑧.手动管理几十或几百个包是一项令人厌烦和耗时的工作。

yarn诞生

yarn 是一个由Facebook、Google、Exponent和Tilde构建的新的JavaScript包管理器。它的出现是为了解决历史上npm的某些不足(比如npm对于依赖的完整性和一致性的保证,以及npm安装过程中速度很慢的问题)
当npm还处于v3时期的时候,一个叫yarn的包管理工具横空出世.在2016年, npm还没有package-lock.json文件,安装的时候速度很慢,稳定性很差,yarn的出现很好的解决了一下的一些问题: 

①.并行安装:无论 npm 还是 Yarn 在执行包的安装时,都会执行一系列任务。npm 是按照队列执行每个 package,也就是说必须要等到当前 package 安装完成之后,才能继续后面的安装。而 Yarn 是同步执行所有任务,提高了性能。

②.离线模式:如果之前已经安装过一个软件包,用Yarn再次安装时之间从缓存中获取,就不用像npm那样再从网络下载了

③.安装版本统一:为了防止拉取到不同的版本,Yarn 有一个锁定文件 (lock file) 记录了被确切安装上的模块的版本号。每次只要新增了一个模块,Yarn 就会创建(或更新)yarn.lock 这个文件。这么做就保证了,每一次拉取同一个项目依赖时,使用的都是一样的模块版本。 npm 随后也推出了相应的 package-lock

④.更简洁的输出:npm 的输出信息比较冗长。在执行 npm install 的时候,命令行里会不断地打印出所有被安装上的依赖。相比之下,Yarn 简洁太多:默认情况下,结合了 emoji直观且直接地打印出必要的信息,也提供了一些命令供开发者查询额外的安装信息。

⑤.更好的语义化: yarn改变了一些npm命令的名称,比如 yarn add/remove,感觉上比 npm 原本的 install/uninstall 要更清晰。

yarn 和 npm 优缺点对比

yarn和npm命令对比

npm yarn
npm install yarn
npm install react --save yarn add react
npm uninstall react --save yarn remove react
npm install react --save-dev yarn add react --dev
npm update --save yarn upgrade
npm run serve yarn serve

npm 安装机制

npm install执行之后, 首先会检查和获取 npm的配置,这里的优先级为:

项目级的.npmrc文件 > 用户级的 .npmrc文件 > 全局级的 .npmrc > npm内置的 .npmrc 文件

然后检查项目中是否有 package-lock.json文件

  • 如果有, 检查 package-lock.jsonpackage.json声明的依赖是否一致:

    • 一致, 直接使用package-lock.json中的信息,从网络或者缓存中加载依赖
    • 不一致, 根据上述流程中的不同版本进行处理
  • 如果没有, 那么会根据package.json递归构建依赖树,然后就会根据构建好的依赖去下载完整的依赖资源,在下载的时候,会检查有没有相关的资源缓存:

    • 存在, 直接解压到node_modules文件中
    • 不存在, 从npm远端仓库下载包,校验包的完整性,同时添加到缓存中,解压到 node_modules

最后, 生成 package-lock.json 文件

提示:同一个项目团队,应该保持npm 版本的一致性。

yarn 安装机制

yarn的安装大致分为5个步骤:

检测包

这一步,最主要的目的就是检测我们的项目中是否存在npm相关的文件,比如package-lock.json等;如果有,就会有相关的提示用户注意:这些文件可能会存在冲突。在这一步骤中 也会检测系统OS, CPU等信息。

解析包
这一步会解析依赖树中的每一个包的信息:
首先呢,获取到首层依赖: 也就是我们当前所处的项目中的package.json定义的dependencies、devDependencies、optionalDependencies的内容。
紧接着会采用遍历首层依赖的方式来获取包的依赖信息,以及递归查找每个依赖下嵌套依赖的版本信息,并将解析过的包和正在进行解析包呢用Set数据结构进行存储,这样就可以保证同一版本范围内的包不会进行重复的解析。

获取包
首先会检查缓存中是否有当前依赖的包,同时呢将缓存中不存在的包下载到缓存的目录中。 

链接包
把项目中的依赖复制到node_modules目录下。

构建包
对项目中的二进制包进行编译构建 

拓展

此外,pnpm 包管理器也可了解下,性能提升显著,大厂对性能要求提交高,所以会优先考虑该方案

https://www.pnpm.cnpnpm - 速度快、节省磁盘空间的软件包管理器https://www.pnpm.cn/

猜你喜欢

转载自blog.csdn.net/qq_34402069/article/details/127552443