一个单行代码的 npm 库,竟然让数百万个 JavaScript 项目崩溃了…

  • A+
所属分类:技术资讯

技术编辑:北京卡尔博客出版:卡尔博客
上星期六更新了JavaScript库,几乎整个JavaScript生态系统陷入混乱,据分析机构粗略统计,数百万个项目受到了影响。
最令人惊讶的是,调用这个引起混乱的库只需要一行代码.
一行代码的威力
导致问题的库名为“is-promise”。该库由两行源代码组成,开发人员可以通过单行调用在项目中使用。开发人员测试JavaScript对象是否为" Promise "的功能也很简单,并且在项目中使用时返回布尔值结果,如true或false
代码仅运行两行,但is-promise库是当今使用最广泛的JavaScript NPM库之一。根据GitHub的数据,此库当前由340万个项目调用,并由766个其他JavaScript库用作从属库。
此新版本的主要更新是使ES模块(作为JavaScript语言使用的标准化模块系统)可用。但是,此最新版本不符合正确的ES模块使用标准。更新后,配置链中使用“is-promise”的项目错误地报告为支持无效的ES模块。
此错误的影响非常迅速、巨大,甚至许多大型JavaScript项目也受到了影响。这包括用于在Facebook中创建React React应用程序的标准模板(App)、Google的Angular.js框架和Firebasse-tools,Amazon的AWS Serverless CLI,以及Nuxt.js
对此,is-promise团队快速响应了更新发布,但没有尝试修改它,而是在v2.2.2.2版本中回滚了对ES的模块支持。
2016年“前车之鉴”
这是在第二个JavaScript生态系统中,“千里大堤破坏了蚁穴”的事故。2016年以前也发生过这种事。
2016年3月,只有17行代码的JavaScript库作者突然决定取消此工具包的发布,许多相关项目受到了影响,当时各种论坛和社区都在进行开发者的广泛讨论。
与2016年一样,此次“is-promise”事件在开发人员中引起了很大的话题,同时还讨论了生态系统是否需要一行库。
有些人认为,开发人员在创建仅占用几行代码、用于琐碎工作的库时,不需要模块化。
但是,也有人认为,这种项目需要模块化,因为这样,成千上万的开发人员可以在一个公用模块中管理工作,而无需以不同的方式处理他们的项目。
关于模块化的讨论已经有几年了,但至今还没有答案。
在当前软件开发中,不使用第三方开发人员提供的现成组件是完全不可能的。目前前端比较受欢迎的几个大框架,核心思想都离不开组件化,因此项目开发速度可以大大提高。但是像这次事故一样,无法控制的危险也很多。
你觉得这个怎么样?你认为应该如何避免类似的危险?
特约解说员:即使ging @ josting也是NPM输了,但NPM输了,已经不记得NPM发生过多少次类似的事情了。Node软件包的灵活性使其繁荣,并允许开发人员随心所欲地使用所需的所有功能,因此,即使此功能简单,开发人员也会变得更加懒惰。开发者认为所有软件包都保持得很好,但是一个系统中引入的不确定性越大,冲突的可能性就越大。因此,请建议所有开发人员多想想安装NPM是否真的需要。
注:ZD net:《Another one-line npm package breaks the JavaScriptecosystem》 rossa primavera:《Upgrading the popular library in JavaScripthas crashed millions of projects》

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: