一、定义
1、npm
npm 是 Node.js 的包管理工具,Node.js package manger,包就是别人写的 Node.js 模块。我们通过 npm,可以方便的使用第三方开发的开源模块,同时也可以把自己的模块发布到 npm 供其它开发者使用。
在初始化 Node.js 项目的时候我们需要通过 npm init 命令,把自己的代码初始化成为 npm 包,这样我们才能更加方便地去使用别人的 npm 包。
npm 通过 Node.js 模块根目录的package.json文件获取模块元数据和依赖关系等。
npm中文文档:npm 中文文档 | npm 中文网
2、yarn
yarn 是由 Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具,为了解决当时 npm 的一些缺陷。
yarn中文文档:Yarn 中文文档
二、npm的缺点
1、速度慢
npm 按照队列执行安装每个 package,只有当前 package 安装完成之后,才会进行后面的安装。
2、同一个项目,npm 安装的时候无法保持一致性
由于 package.json 文件中版本号的特点,下面三个版本号在安装的时候代表不同的含义:
"5.0.3", //安装指定的5.0.3版本
"~5.0.3", //安装5.0.X中的最新版本
"^5.0.3" //安装5.X.X中的最新版本
3、npm 安装的时候,一个包抛出错误,npm 会继续下载安装包
npm 安装的时候,一个包抛出错误,npm 会继续下载安装包,而且因为 npm 会把所有的日志输出到终端,有关错误包的错误信息就会淹没在 npm 打印的警告中,你甚至不会发现错误的产生。
三、yarn与npm的区别
1、共同点
yarn与npm都是包管理工具,都可以安装包和模块。
2、区别
npm克隆并初始化一个项目
git clone xxx
npm install
npm run dev
yarn克隆并初始化一个项目
git clone xxx
yarn
yarn start
npm会生成一个package-lock.json的文件,yarn会生成一个yarn.lock的文件
3、yarn的优点
① yarn的速度快
并行安装:npm和 yarn 在执行包的安装时,都会执行一系列任务。npm 是按照队列执行每个 package,必须要等到当前 package 安装完成之后,才能继续后面的安装。而yarn 是同步执行所有任务,提高了性能。
离线模式:如果之前已经安装过一个软件包,用yarn再次安装时之间从缓存中获取,就不用像npm那样再从网络下载了。
安装版本统一:为了防止拉取到不同的版本,yarn 有一个锁定文件 记录了被确切安装上的模块的版本号。每次只要新增了一个模块,yarn 就会创建(或更新)yarn.lock 这个文件,每一次拉取同一个项目依赖时,使用的都是一样的模块版本;npm 其实也有办法实现处处使用相同版本的 packages,但需要开发者执行 npm shrinkwrap 命令,通过 shrinkwrap 命令生成 npm-shrinkwrap.json 文件,只有当这个文件存在的时候,packages 版本信息才会被记录和更新。
② 更简洁的输出
npm 的输出信息比较冗长。在执行 npm install 的时候,命令行里会不断地打印出所有被安装上的依赖。相比之下,yarn 简洁太多:默认情况下,结合了 emoji直观且直接地打印出必要的信息,也提供了一些命令供开发者查询额外的安装信息。
③ 多注册来源处理
所有的依赖包,不管他被不同的库间接关联引用多少次,安装这个包时,只会从一个注册来源去装,要么是 npm 要么是 bower, 防止出现混乱不一致。
④ 更好的语义化
yarn改变了一些npm命令的名称,比如 yarn add/remove,感觉上比 npm 原本的 install/uninstall 要更清晰。
四、npm与yarn命令对比
命令 | npm包管理工具 | yarn包管理工具 |
初始化项目 | npm init | yarn init |
快速初始化目录 | npm init -y | yarn init -y |
安装项目全部依赖包 | npm install | yarn或yarn install |
添加某个依赖包 | npm install xxx@3 | yarn add xxx@3 |
运行命令 | npm run xxx | yarn run xxx |
更新某个依赖项目 | npm update xxx | yarn upgrade xxx |
卸载依赖包 | npm uninstall xxx | yarn remove xxx |
查找某个包信息 | npm info xxx | yarn info xxx |
淘宝镜像 |
https://registry.npm.taobao.org | yarn config set registry https://registry.npm.taobao.org |