写点什么

两行代码险些搞垮 JavaScript 生态,受影响项目超百万

  • 2020-04-29
  • 本文字数:1282 字

    阅读完需:约 4 分钟

两行代码险些搞垮 JavaScript 生态,受影响项目超百万

4 月 25 日,一个名为 is-promise 的 npm 库进行了更新并发布了 v2.2.0 版本,没想到这一次更新却使 JavaScript 生态陷入危机,据媒体报道,目前已有数百万个项目受到了影响,而事件的始作俑者竟是一个仅仅“单行”的 JavaScript 库。

事件回顾

is-promise 库主要用来测试 JavaScript 对象是否为“Promise”,并在开发时使用该函数返回布尔值 yes 或 no,开发者可以通过 one-liner 调用并在自己的项目中使用这个库。4 月 25 日,is-promise 正常进行更新,发布了 is-promise v2.2.0,但由于该版本并未遵循正确的 ES 模块标准,从而导致更新完成后,由于不正确的 ES 模块标准,所有在构建时使用 is-promise 库的项目几乎全部发生故障。虽然这一错误不会使现有项目崩溃,但它却对开发者编译自己项目的新版本造成了影响。


来看一下“肇事者”:


declare function isPromise<T, S>(obj: Promise<T> | S): obj is Promise<T>;export default isPromise;
复制代码


虽然这个问题立即就被发现了,但仍影响到了一些 JavaScript 生态系统中的“大项目”,其中包括 Facebook 的 Create App,三大框架之一的 Angular,Google 的 Firebase 工具,亚马逊的 AWS Serverless CLI,Nuxt.js,AVA 等等。很多开发者都表示受到了影响:


https://github.com/then/is-promise/issues/13


GitHub 上显示,与该库有依赖关系的项目超过 340 万个。



该团队在第一时间发布了 is-promise v2.2.1 更新,但是并未能解决问题,最终在几个小时后发布的 is-promise v2.2.2 中修正了 ES 模块支持的问题,这一“紧急事件”才落下帷幕。

并非第一起事故

仅仅两行代码就造成了这么大的影响,实际上这并不是第一次发生。早在 2016 年 3 月,一个名为 left-pad 且仅有 17 行代码的 npm 库也曾引发过一起事故,起因是这个库的作者创建了一个 npm 模块并命名为 kik,这个名字与当时的一个聊天软件 Kik 如出一辙,所以 Kik 的负责人找到该作者并希望他换一个名字,结果双方并没有谈妥,该作者一气之下突然决定取消发布所有的库,导致无数项目出现事故。


与 2016 年一样,“is-promise 事件”引发了一众开发者的疑问:是否需要在 JavaScript 生态中提供 one-liner 库?JavaScript 模块化究竟是否必需?

JavaScript 模块化

一部分开发者认为,当开发人员创建这种只有几行代码的库时,模块化实在是过于繁琐;而另一部分开发者则认为,模块化十分有必要,某一个任务可以在其对应的模块内统一管理,而不是让开发者以不同的方式在自己的项目中处理。


对于一个复杂的 Web 应用来说,模块化编程显然是一个更具优势的选择,很多 JavaScript 库都是这样实现的。在 ES6 之前,很多前端社区曾自己钻研模块化开发,经历了 AMD/CMD/UMD 等阶段,这里不过多赘述。ES6 中首次引入模块化开发规范,让 Javascript 首次支持原生模块化开发,从此,JavaScript 模块化被越来越多的开发者接受。


JavaScript 模块化也说明了 Web 的能力在不断增强,Web 应用日趋复杂。相信未来 JavaScript 的能力会继续提升,前端开发者们的开发效率也会更加高效。

延伸阅读

https://www.zdnet.com/article/another-one-line-npm-package-breaks-the-javascript-ecosystem/


2020-04-29 11:304460
用户头像
李俊辰 InfoQ编辑

发布了 228 篇内容, 共 91.3 次阅读, 收获喜欢 275 次。

关注

评论 2 条评论

发布
用户头像
看不懂 这不是ts的声明文件写法么?问题是啥?
2020-05-03 16:28
回复
用户头像
两行的话,还是放项目内吧,何必呢。依赖越多,越脆弱
2020-04-29 16:41
回复
没有更多了
发现更多内容

详细了解Spring Bean 生命周期

愚者

Java Spring Bean

数字人民币是现有世界上最完整设计最灵活的央行数字货币

CECBC

拿来吧你!从阿里P8手里抢来的的JDK源码解析手册,Alibaba真的强

java小李

jdk

渣本展示Spring Cloud 架构绝活!最后成功入职阿里

java小李

Spring Cloud

泪目!跳槽太不容易,蚂蚁金服三轮面试,四个小时灵魂拷问

java小李

面试 Leader

牛牛牛!一张图,5个章节就把高并发/高可用讲清楚了!

Java架构师迁哥

阿里云飞天论文获国际架构顶会 ATC 2021最佳论文:全球仅三篇

阿里云大数据AI技术

Java基础之hashcode剖析

愚者

Java

星环研发总监为你揭秘TDH8.0的前因后果 | TDH8.0 使用必读

星环科技

鉴释宣布加入RISC-V基金会、Linux基金会、seL4基金会与IoXt联盟, 旨在实现静态代码分析服务的全方位赋能

鉴释

Linux IoT 静态代码分析

ES6中的生成器函数是什么?

devpoint

ES6 JavaScrip 7月日更

模块四作业

燕燕 yen yen

架构实战营

阿里资深架构师倾情力荐:Java全线成长宝典,P5到P8一应俱全

愚者

Java 面试

史上最全面Java面试指南手册宝典!轻松拿腾讯等大厂offer

愚者

Java 面试

对于大部分Java开发者说“60W年薪是无法逾越沟壑”你赞同吗?

愚者

Java 后端

音视频面试题

hanaper

语音 图像识别 图像处理 视频流 图像增强

阿里内网疯传的P8“顶级”分布式架构手册,GitHub上线直接霸榜了

java小李

微信业务架构 P8

被下架三次了,手慢无,23w字中高级Java面试题库!

Java架构师迁哥

大专的我狂刷29天“阿里内部面试笔记”最终直接斩获十七个Offer

java小李

大数据 面试

阿里云技术三面Java岗,只需半个月,就可以成功拿25k offer ,轻松任职阿里云

愚者

Java 阿里云

百分点数据科学实验室:智慧应急安全生产智能决策方案建设实践

百分点认知智能实验室

关于机器学习的“灵魂拷问” ,这样的答案硬核!| 云途专栏

亚马逊云科技 (Amazon Web Services)

再见~ 蚂蚁金服!(已拿offer)

java小李

JavaScript java新语法

我们向华为公司学什么?

石云升

学习 华为 7月日更

声网 Agora 音频互动 MoS 分方法:为音频互动体验进行实时打分

RTE开发者社区

算法 网络

秀出新天际的SpringBoot笔记,让开发像搭积木一样简单

java小李

Spring Boot java架构

阿里巴巴中高级java面试题详解,吃透这20道面试题,offer拿到你手软

愚者

Java 面试

Java程序员掌握这份文档,让你刚出来三个月从6K涨到15K

愚者

Java 涨薪

卧槽这菜鸡程序员不讲武德,年薪居然有50万(50万面经分享)

java小李

面试

硬核!一套基于SpringBoot + Vue 的开源物联网智能家居系统!

编程菌

Java 编程 程序员 项目 计算机

数字人民币专利数量井喷 智能合约成新方向

CECBC

两行代码险些搞垮 JavaScript 生态,受影响项目超百万_大前端_李俊辰_InfoQ精选文章