yarn 和 npm 比拟

- npm 的弱点汇总:统一个项目,安装的时辰无法保持同等性。因为package.json文件中版本号的特点,下面三个版本号在安装的时辰代表差异的寄义。
- "5.0.3",
- "~5.0.3",
- "^5.0.3"
- “5.0.3”暗示安装指定的5.0.3版本,“~5.0.3”暗示安装5.0.X中最新的版本,“^5.0.3”暗示安装5.X.X中最新的版本。这就贫困了,经常会呈现统一个项目,有的同事是OK的,有的同事会因为安装的版本纷歧致呈现bug。
- 安装的时辰,包会在统一时刻下载和安装,半途某个时辰,一个包抛出了一个错误,可是npm会继承下载和安装包。由于npm会把全部的日记输出到终端,有关错误包的错误信息就会在一大堆npm打印的告诫中丢失掉,而且你乃至永久不会留意到现实产生的错误。
yarn 的利益
- 速率快 。速率快首要来自以下两个方面:
- 并行安装:无论 npm 照旧Yarn在执行包的安装时,城市执行一系列使命。npm是凭证行列执行每个package,也就是说必必要比及当前package安装完成之后,才气继承后头的安装。而 Yarn 是并行执行全部使命,进步了机能。
离线模式:假如之前已经安装过一个软件包,用Yarn再次安装时之间从缓存中获取,就不消像npm那样再从收集下载了。
- 安装版本同一:为了防备拉取到差异的版本,Yarn 有一个锁定文件 (lock file)记录了被确切安装上的模块的版本号。每次只要新增了一个模块,Yarn 就会建设(或更新)yarn.lock 这个文件。这么做就担保了,每一次拉取统一个项目依靠时,行使的都是一样的模块版本。npm 着实也有步伐实现随处行使沟通版本的 packages,但必要开拓者执行 npm shrinkwrap呼吁。这个呼吁将会天生一个锁定文件,在执行 npm install的时辰,该锁定文件会先被读取,和 Yarn 读取 yarn.lock 文件一个原理。npm 和 Yarn 两者的差异之处在于,Yarn 默认会天生这样的锁定文件,而 npm 要通过 shrinkwrap 呼吁天生 npm-shrinkwrap.json 文件,只有当这个文件存在的时辰,packages版本信息才会被记录和更新。
- 更简捷的输出:npm的输出信息较量冗长。在执行npm install 的时辰,呼吁行里会不绝地打印出全部被安装上的依靠。对比之下,Yarn 简捷太多:默认环境下,团结了emoji直观且直接地打印出须要的信息,也提供了一些呼吁供开拓者查询特另外安装信息。
- 多注册来历处理赏罚:全部的依靠包,不管他被差异的库间接关联引用几多次,安装这个包时,只会从一个注册来历去装,要么是 npm 要么是 bower, 防备呈现紊乱纷歧致。
- 更好的语义化: yarn改变了一些npm呼吁的名称,好比 yarn add/remove,感受上比npm本来的 install/uninstall 要更清楚。
那不是问题党? 说了yarn这么多利益,我们为什么还要npm呢?
你不消npm publish ,你怎么上传包到npm? 你不消cnpm,是下载不了一些包的
搞清晰三者下载包(依靠)的本质功效:
- 起首向对应的node_module文件夹下面下载包(假如你非要下到全局,那么再会)
- 再然后是json文件中添加对应的依靠字段,确定是线上依烂魅照旧开拓依靠
- 只要做到这两者 你就下包乐成
- 总结就是 只要功效 进程管你是啥
行使yarn下载过的包,再行使npm cnpm下载 会一再下载,删除之前的包
- puppeteer这个包所依靠的mini版谷歌赏识器行使cnpm下载就可以美满办理
- prerender-spa-plugin这个包依靠上面的木偶戏 puppeteer这个包,也可以用cnpm下载
- 殽杂行使包揽理器牢记,不要一再下载依靠,npm cnpm下载依靠,必然要添加注明是什么依靠,是否全局安装
- yarn和npm i两者,选择前者,缘故起因在上面有提到,总体来说,yarn是不二选择,可是其他两者也不行穷乏,好比electron这个依靠,行使cnpm就可以美满一键安装
References
- [1] 手写优化版React脚手架: https://segmentfault.com/a/1190000019126657
- [2] 手写Vue的脚手架: https://segmentfault.com/a/1190000019207033
- [3] 前端机能优化不完全手册: https://segmentfault.com/a/1190000018827395
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|