ttop5/blog

为什么要用yarn替代npm?

ttop5 opened this issue · 0 comments

ttop5 commented

自动锁定版本

这是我坚定不移的使用yarn替换npm的最大原因,只因一次对老项目的问题排查(说多了都是泪 😭 )。

一般使用如 npm install lodash 的时候package.json里面写入的是类似于 "lodash": "^2.4.0",默认项目的依赖包每次安装都取最新版,依赖包的更新避免不了的会对我们自己的项目造成巨大的影响,所以我们需要锁定版本。

当然,对此npm官方推出了 shrinkwrap 用来锁定你的依赖版本,你页可以在 package.json 中手动锁定版本(不使用 ^ 的宽泛版本管理),但是由于npm的安装包的层次结构,你对你项目所依赖的三方包的依赖没办法进行控制,任何一个三方包不严谨的版本依赖就可能破坏你的依赖管理。使用yarn这些问题就不复存在!

扁平依赖和嵌套依赖

flat
nested
扁平化模式 — 对于不匹配的依赖版本的包创立一个独立的包,避免创建重复的包。

很快,非常快

yarn 缓存了每次你下载的模块,所以同样模块同样的版本不会发送第二次下载请求,对于没有缓存的模块, yarn 也可以通过并行的网络请求最大限度利用网络资源。现在真的是没有什么几十秒安装不完的依赖的。一个 50 个依赖的 webpack + babel 项目可以在 20 秒左右安装完成。有人拿 lockfile 说事,这。。。去掉一个默认的特性还有什么好对比的,你可以参考官方对比 npm 的区别 Compare Yarn Performance

安全、可靠

yarn 在开始安装一个包之前会先用 checksums 来验证,你不用担心本地的缓存的包被破坏了导致安装失败。FB开发、使用和维护,靠谱~