当前位置:网站首页>npm 与 yarn 发展史
npm 与 yarn 发展史
2022-07-21 10:51:00 【追逐、】
一、 javascript 中包管理的历史
npm 出现之前:前端依赖项是保存到存储库中并手动下载的
2010:npm 发布并支持 nodejs
2012:npm 的使用量急剧增加——主要是由于 Browserifys 浏览器的支持
2012:npm 有了一个竞争对手 bower,它完全支持浏览器
2012-2016:前端项目的依赖项数量成倍增加
2012-2016:构建和安装前端应用变得越来越慢
2012-2016:大量(重复的)依赖项存储在神奇的 node_modules 内的嵌套文件夹中️
2012-2016:rm -rf node_modules 成为前端开发人员最常用的命令。
2015:bower 输给了 npm
2015:node_modules 被修改为扁平化的文件结构!
2016: left-pad成为当时的新闻头条
2016: yarn 发布
支持 npm 和 bower 仓库
yarn.lock 能够锁定安装的版本并提供确定性的依赖关系。不再 rm -rf node_modules!
yarn install 花费的时间是 npm install 的一半(不使用缓存的前提下)
缓存和脱机模式使构建过程几乎不花费时间2016:npm 发布 shrinkwrap
尝试处理依赖项锁定
不幸的是,一些错误和超出其管理能力的承诺导致该工具的声誉下降2017:npm 5 发布
package-lock.json 是他们的新工具,shrinkwrap 被放在一边
package-lock.json 开始与 yarns 锁定文件竞争2018:npm ci 发布
直接用 package-lock.json 构建代码
没有代价高昂的依赖项安全性分析和版本分析
大大减少了在构建服务器上的构建时间!2018:npm 6 发布 *️
npm 检查要安装的依赖项中的安全漏洞
yarn 发布 pnp 概念(即插即用,缓存node_modules),详见我的这篇博客
yarn 和 npm 的构建时间不再有显差异2019:tink 开始进入 beta 模式
避免使用 node_modules,而是为项目中的每个依赖项创建一个带有哈希值的文件
尚未做好投入生产环境的准备
…
二、选择yarn 还是 npm?
如我们所见,yarn 发布后,npm 受到启发(并被迫?)开发了许多好的工具和机制。 yarn 因为解决了与 npm 相关的一些重要问题而倍受赞誉,并在 2016 年开始向竞争对手施加压力。包的处理速度、安全性和确定性是必不可少的功能,它们使当今的开发人员能够专注于创造价值,而且并不为这两种工具进行争吵。
所以,为了方便起见,我建议大多数团队(必须做出许多其他更重要的技术决定)选择最简单的选项 —— npm。它随 node 一起提供,目前能以足够好的方式处理包管理,目前npm6.x在构建速度、包管理方式等于yarn已经没有明显区别
三、未来的趋势
2021年就要来了,npm和yarn这块还会有更多新技术值得我们关注,例如npm团队开发的tink,虽然现在还没有出来,但是 virtual node_modules的概念非常吸引人,团队表示会在随npm 8.0一起发布。yarn 团队的 pnp (Plug’n’Play)也在yarn 1.12+版本中可用。只能说两家都在努力,但是对于咱们来说,只需要把握好趋势即可~
2022.6.3日(长期有效):打个广告,苏州华为终端BG面向社会招聘人才,Java /C C++ / Python / Javascript 。有兴趣来苏州的同学们 可以加我V 15850277051 ,走内推流程,有问必答!
边栏推荐
- likeshop单商户SAAS商城系统无限多开
- (板子)试除法求约数
- Intel汇编程序设计-整数算术指令(上)
- [first launch in the whole network] redis series 4: sentinel (sentinel mode) with high availability
- Neural network GCNN of drawing machine
- 多模态模型 CLIP4Clip 带你实现文本与视频互搜
- Unity surface shader foundation memo
- 怎样才能让需求无法如期顺利上线(四)集成测试阶段
- Unity代码通过Package Manager导入包的方法
- Alibaba cloud technology expert Yang Zeqiang: building observable capabilities on elastic computing cloud
猜你喜欢
迅为龙芯开发板流程运行busybox,buildroot,loognix,QT5.12系统
阿里云技术专家杨泽强:弹性计算云上可观测能力构建
仪器仪表,三相电表LCD段码液晶低功耗抗干扰驱动IC-VK2C23A/B (可出DICE/COB)
likeshop单商户SAAS商城系统无限多开
[激光器原理与应用-6]:Q开关元件与Q驱动电路板
隐马尔科夫模型 HMM
Dynamically generate excel forms in word documents (explanation of Fund announcement Series)
Data too long for column ‘......‘ at row 2
简易Shader实践记录5-屏幕渐变
Instrumentation, three-phase ammeter LCD segment code LCD low-power anti-interference drive ic-vk2c23a/b (dic/cob can be output)
随机推荐
likeshop单商户SAAS商城系统无限多开
Unity代码通过Package Manager导入包的方法
JDBC 02: connect to MySQL and realize deletion and update
LeetCode402 移掉 K 位数字
Polarimetric SAR - Polarimetric ellipse
第98篇 Truffle
执掌英国工程技术学会 13 载,范纳杰正式退休
Instrumentation, three-phase ammeter LCD segment code LCD low-power anti-interference drive ic-vk2c23a/b (dic/cob can be output)
Custom annotation verification parameters
Information entropy_ Joint entropy_ Conditional entropy_ information gain
SystemVerilog: how to specify simulation source files?
[FAQ] common reasons and solutions for the failure of in app payment services to pull up the payment page
将一张图片以自己输入文字方式组成
怎样才能让需求无法如期顺利上线(四)集成测试阶段
第93篇 合约间调用(二)
Discussion on the practice of layaair
第97篇 笔记-solidity中的抽象(Abstract)
Nacos配置中心之环境准备
高德地图在Geoserver图层上定位出现偏移的解决办法
"If..." Rudyard Kipling