npm 是什么
npm(全称 Node Package Manager)是一个软件包管理系统,专门管理用 JavaScript 编写的软件包。npm 使用该npm install命令安装依赖项。依赖项是按顺序安装的,一个接一个,比较缓慢。
下载安装 node.js 会自动安装npm
yarn 是什么
yarn是由Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具。
yarn 也是一个 JavaScript 软件包,需要先使用 npm 进行安装。
安装yarn npm 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.json
和package.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/