当前位置:统一通信/协作企业动态 → 正文

Facebook开源JavaScript包管理器Yarn

责任编辑:editor005 作者:Abel Avram |来源:企业网D1Net  2016-10-18 15:59:46 本文摘自:INFOQ

Facebook开源了Yarn,这是针对存储在npm或Bower注册表中的JavaScript模块的一个代理包管理器。

按照其三位工程师所撰写的博客文章,多年以来,Facebook一直非常成功地使用npm客户端。在他们的团队中,这起初运行得很不错,直到代码库增长到一个点,此时“一致性、安全性以及性能”方面的问题开始浮现:

在Facebook,我们的很多项目,比如React,都会依赖npm注册表中的代码。但是,随着内部的扩展,当在不同的机器和用户上安装依赖时,我们遇到了一致性的问题,还要考虑到加载依赖所消耗的时间,另外,npm客户端在加载某些依赖的时候,会自动执行代码,这也会带来安全方面的问题。

例如,更新babel的一个小版本都会导致800,000行的提交,这样的话,对于非法utf8字节序列、Windows换行符以及non png-crushed图片触发lint规则校验就会非常困难。对node_modules合并变更经常会耗费工程师一整天的时间。

他们所做的最后一次尝试就是从源码中移除这些模块,并将其放到内部的CDN上。但是,这意味着要为开发和CI构建机器提供互联网的连接,而这是无法接受的。最终,他们构建了自己的包管理器,名为Yarn,Facebook认为它是快速、可靠和安全的。

Yarn具有多项特性:

离线模式(Offline Mode):如果你之前安装过某个包,那么你可以在没有互联网连接的情况下,对这个包进行重新安装。确定性(Deterministic):不管安装顺序如何,相同的依赖在每台机器上会以完全相同的方式进行安装。网络性能:Yarn会对请求进行高效地排队,避免出现请求瀑布(waterfall),便于将网络的使用效率达到最大化。网络弹性(Network Resilience):单个请求的失败不会导致整个安装的失败,请求会基于故障进行重试。扁平模式(Flat Mode):将不匹配的依赖版本都会解析为同一个版本,避免重复创建。

另外值得一提的特性就是Yarn能够与npm和Bower注册表协作使用。

经营npm注册表的npm公司对 Yarn表示欢迎,因为这是对已有Node.js管理器的一个补充,值得注意的是,尽管Yarn会从registry.yarnpkg.com抓取包,但这个仓库仅仅是官方npm注册表的一个代理。还有Facebook没有明确提及的一点,Yarn的另外一个目的在于:在npm注册表宕机时,所有的Node模块能有一个安全的备份,因为在今年春天npm曾经停机2.5小时,导致世界范围内成千上万的开发人员构建失败。除非具有像Facebook那样的扩展性和开发需求,Yarn不一定是必须的,但是通过代理来获取包能够在原始注册表发生宕机时,提供一个弹性层。

Facebook还介绍说Yarn是与Exponent、Google和Tilde协作的成果。它的代码已经基于BSD许可证协议在GitHub上开源。

关键字:YARNFacebook

本文摘自:INFOQ

x Facebook开源JavaScript包管理器Yarn 扫一扫
分享本文到朋友圈
当前位置:统一通信/协作企业动态 → 正文

Facebook开源JavaScript包管理器Yarn

责任编辑:editor005 作者:Abel Avram |来源:企业网D1Net  2016-10-18 15:59:46 本文摘自:INFOQ

Facebook开源了Yarn,这是针对存储在npm或Bower注册表中的JavaScript模块的一个代理包管理器。

按照其三位工程师所撰写的博客文章,多年以来,Facebook一直非常成功地使用npm客户端。在他们的团队中,这起初运行得很不错,直到代码库增长到一个点,此时“一致性、安全性以及性能”方面的问题开始浮现:

在Facebook,我们的很多项目,比如React,都会依赖npm注册表中的代码。但是,随着内部的扩展,当在不同的机器和用户上安装依赖时,我们遇到了一致性的问题,还要考虑到加载依赖所消耗的时间,另外,npm客户端在加载某些依赖的时候,会自动执行代码,这也会带来安全方面的问题。

例如,更新babel的一个小版本都会导致800,000行的提交,这样的话,对于非法utf8字节序列、Windows换行符以及non png-crushed图片触发lint规则校验就会非常困难。对node_modules合并变更经常会耗费工程师一整天的时间。

他们所做的最后一次尝试就是从源码中移除这些模块,并将其放到内部的CDN上。但是,这意味着要为开发和CI构建机器提供互联网的连接,而这是无法接受的。最终,他们构建了自己的包管理器,名为Yarn,Facebook认为它是快速、可靠和安全的。

Yarn具有多项特性:

离线模式(Offline Mode):如果你之前安装过某个包,那么你可以在没有互联网连接的情况下,对这个包进行重新安装。确定性(Deterministic):不管安装顺序如何,相同的依赖在每台机器上会以完全相同的方式进行安装。网络性能:Yarn会对请求进行高效地排队,避免出现请求瀑布(waterfall),便于将网络的使用效率达到最大化。网络弹性(Network Resilience):单个请求的失败不会导致整个安装的失败,请求会基于故障进行重试。扁平模式(Flat Mode):将不匹配的依赖版本都会解析为同一个版本,避免重复创建。

另外值得一提的特性就是Yarn能够与npm和Bower注册表协作使用。

经营npm注册表的npm公司对 Yarn表示欢迎,因为这是对已有Node.js管理器的一个补充,值得注意的是,尽管Yarn会从registry.yarnpkg.com抓取包,但这个仓库仅仅是官方npm注册表的一个代理。还有Facebook没有明确提及的一点,Yarn的另外一个目的在于:在npm注册表宕机时,所有的Node模块能有一个安全的备份,因为在今年春天npm曾经停机2.5小时,导致世界范围内成千上万的开发人员构建失败。除非具有像Facebook那样的扩展性和开发需求,Yarn不一定是必须的,但是通过代理来获取包能够在原始注册表发生宕机时,提供一个弹性层。

Facebook还介绍说Yarn是与Exponent、Google和Tilde协作的成果。它的代码已经基于BSD许可证协议在GitHub上开源。

关键字:YARNFacebook

本文摘自:INFOQ

电子周刊
回到顶部

关于我们联系我们版权声明隐私条款广告服务友情链接投稿中心招贤纳士

企业网版权所有 ©2010-2024 京ICP备09108050号-6 京公网安备 11010502049343号

^