概述
-
yarn 官网:https://www.yarnpkg.com/zh-Hans/;
-
yarn 是由 Facebook、Google、Exponent 和 Tilde 联合推出了一个新的 JS 包管理工具,它仍然使用 npm 的registry,不过提供了全新 CLI 来对包进行管理;
npm 的问题
过去 yarn 的出现极大的抢夺了 npm 的市场,甚至有人戏言 npm 只剩下一个 registry 了;
之所以会出现这种情况,是因为在过去,npm 存在很多的问题:
-
依赖目录嵌套层次深
:过去 npm 的依赖是嵌套的,这在 windows 系统上是一个极大的问题,由于众所周知的原因,windows 系统无法支持太深的目录; -
下载速度慢
:- 由于嵌套层次的问题,所以 npm 对包的下载只能是串行的,即前一个包下载完后才会下载下一个包,导致带宽资源没有完全利用;
- 多个相同版本的包被重复的下载;
-
控制台输出繁杂
:过去 npm 安装包的时候,每安装一个依赖,就会输出依赖的详细信息,导致一次安装有大量的信息输出到控制台,遇到错误极难查看; -
工程移植问题
:由于 npm 的版本依赖可以是模糊的,可能会导致工程移植后,依赖的确切版本不一致;
yarn 优势
-
针对上述问题,yarn 从诞生那天就已经解决,它用到了以下的手段:
- 使用扁平的目录结构;
- 并行下载;
- 使用本地缓存;
- 控制台仅输出关键信息;
- 使用 yanr-lock 文件记录确切依赖;
-
不仅如此 yarn 还优化了以下内容:
- 增加了某些功能强大的命令;
- 让既有的命令更加语义化;
- 本地安装的 CLI 工具可以使用 yarn 直接启动;
- 将全局安装的目录当作一个普通的工程,生成 package.json 文件,便于全局安装移植;
-
yarn 的出现给 npm 带来了巨大的压力,很快 npm 学习了 yarn 先进的理念,不断的对自身进行优化,到了目前的 npm6 版本,几乎完全解决了上面的问题:
- 目录扁平化;
- 并行下载;
- 本地缓存;
- 使用 package-lock 记录确切依赖;
- 增加了大量的命令别名;
- 内置了 npx ,可以启动本地的 CLI 工具;
- 极大的简化了控制台输出;
总结
-
npm6 之后,可以说 npm 已经和 yarn 非常接近,甚至没有差距了,很多新的项目,又重新从 yarn 转回到 npm;
-
这两个包管理器是目前的主流,都必须要学习;
npm👉 发布包
上一篇