一个愤怒的开发人员是如何打破javascript的

美国东部时间周二下午5:30左右,JavaScript崩溃。更具体地说,npm,大多数JavaScript开发人员用来源代码、测试和准备发布代码的包管理器,开始失败。对于全世界成千上万的开发人员来说,工作流中最重要的工具是行不通的。...

美国东部时间周二下午5:30左右,JavaScript崩溃。更具体地说,npm,大多数JavaScript开发人员用来源代码、测试和准备发布代码的包管理器,开始失败。对于全世界成千上万的开发人员来说,工作流中最重要的工具是行不通的。

007Ys3FFgy1gq5ozatelij33402c04qu

不久之后,一个名为“npmjs.org告诉我left pad不可用(404页)”的新版本在一个鲜为人知的GitHub存储库上被打开:azer/left pad。几十个开发人员很快加入了这个问题,几分钟之内他们就发现了这个问题:azer已经从npm“取消发布”了他的“左键盘”代码。

左pad是一个小码位,稀疏11行。基本上,它是一个JavaScript函数,它接受一个字符串,并在左边添加一个您选择的“填充”字符串。

他们工作流程中最重要的工具不起作用

Npm是关于在其他包的基础上构建的包的,这就是为什么left pad到处都是。据npm统计,left pad在上个月已经安装了2550569次,主要是作为一个名为“行号”的软件包的一部分,该软件包将行号添加到文本中。除了许多其他项目外,“Babel”包中还包含行号,这反过来又打破了依赖Babel的数千个JavaScript项目。

所有Azer Koç乌卢要做的就是推第一块多米诺骨牌。用GitHub用户laurenaiad的话说(她收到了63顶派对礼帽,27个竖起的大拇指,4个微笑,3个竖起的大拇指,还有3颗心作为她的评论):

“这种方式刚刚打破了互联网。”

什么是npm?

在许多方面,JavaScript一直是软件世界的西部。就像它的兄弟web技术CSS和HTML一样,JavaScript一直受到浏览器供应商的奇思妙想的影响,他们训练开发人员进行防御性编码。由于没有单一的JavaScript“真相”来源,开发人员传统上依赖第三方库来消除浏览器之间的差异。

JavaScript库还填补了该语言的另一个空白:缺乏标准库。传统上,像“left pad”这样的函数都是由语言作者提供的——大公司支持的语言,比如微软的C#、谷歌的Go、Mozilla的Rust和苹果的Swift,都有很大的、花哨的标准库,里面充满了常用的函数,所以开发者不必从头开始写所有的东西。JavaScript开发人员从来没有任何易于访问的代码库可以依赖。。。直到npm出现。

Npm允许开发人员轻松地将代码块导入到他们的项目中。比如,如果我想留下一些东西,我可以直接打字

npm install left-pad

进入命令行,现在我可以左垫我的心。

反过来,如果我认为我已经编写了一些其他人可能会觉得有用的JavaScript,我可以把它贴在GitHub上并发布在npm上,这样其他人就可以在自己的项目中轻松地使用它了。

谈谈巴贝尔

Babel是近年来最著名的npm软件包之一。通过npm在您的开发机器上安装它,您可以编写ES6(也称为ES2015)——当前浏览器仅部分支持的最新和最好的JavaScript版本——并将其转换为兼容的、可在任何地方运行的ES5。巴贝尔是由塞巴斯蒂安麦肯齐,谁是一个无聊的高中生在澳大利亚时,他开始了这个项目。他现在为Facebook工作。

在过去的一个月里,Babel已经安装了749195次,并且已经被构建到React Native的核心中,React Native是Facebook用JavaScript构建移动应用程序的新框架,因此可以肯定的说,Babel及其化身是行号和left pad广受欢迎的主要原因。

根据Babel自己的网站,Babel基本上无处不在:Facebook、Netflix、PayPal、Yahoo、Spotify、Reddit、Slack、LinkedIn、GoDaddy、Squarespace。。。它很受欢迎。

由于左垫不见了,巴贝尔无法安装

我甚至不知道巴贝尔用行号函数做什么,但这并不重要。重要的是,Babel包将行号包声明为“依赖项”,将left pad声明为依赖项。由于左垫不见了,巴贝尔无法安装。

所以,当这个11行的小包装打破了巴贝尔,巴贝尔打破了一切,人们注意到。

左派的作者

阿泽尔科çulu是一个多产的开源软件的作者,大部分都是左撇子:提供简单JavaScript功能的小型单服务npm包。Npm按照先到先得的原则给作者提供包名,Azer有一堆,确切地说是273个。举几个例子:“rnd”,一个随机数发生器strip,“一个去掉HTML标签的函数;和“随机颜色”,它生成随机的RGB颜色,自然地,依赖于rnd。

他还不起眼地拥有“Kik”这个名字,这是为了帮助开发人员从命令行简单轻松地启动新项目而构建的一个更复杂的开源项目。

这就是所有这些戏剧性的开始。你可以在这里读到艾泽尔的故事。基本上,这家名为Kik的短信应用公司通过律师联系了Azer(Kik说它实际上是一家专利代理),告诉他从npm中删除Kik包。他拒绝了,公司继续联系npm,npm同意了他的要求,并转让了“Kik”软件包名称的所有权。虽然npm是一个开源项目,但它主要由一家私人公司开发和维护:npm,Inc。

Azer在媒体上写道(强调):

This situation made me realize that NPM is someone’s private land where corporate is more powerful than the people, and I do open source because, Power To The People.

阿泽的反应是取消(或“解放”)所有模块从npm。

后事

毕竟只有11行。同样,开源JavaScript的狂野性也让Azer取消了发布如此广泛的影响,这使得其他开发人员可以在数小时内突然袭击并解决问题。您可以在最初提出问题的GitHub线程中自己跟踪操作。巴贝尔删除了对行号的依赖,并发布了一个更新版本,npm最终在Azer占用的同一个插槽中重新发布了左pad代码。Npm还将Azer的所有其他Npm模块名称都集中在一起,以确保没有人可以向它们上传恶意代码。

如果Reddit和Hacker新闻的评论是任何迹象的话,那么Azer的行为会引起很多人对当前JavaScript最佳实践的质疑。硅谷“快走,打破现状”这句格言的经典后续就是“慢下来,解决你的问题”

“慢点,修好你的屎。”

具有讽刺意味的是,Kik自己的软件构建过程受到了left pad未发布的影响,Kik的Messenger负责人Mike Roberts第二天在自己的媒体帖子中解释了这一点。迈克试图给出故事中Kik的一面,并公布了Azer、Kik和npm之间的整个电子邮件链。Mike称在npm上获得Kik的名字是一个“礼貌的请求”,目的是发布Kik一直在做的开源项目,但他发布的电子邮件确实威胁到律师。

Npm也发表了自己关于这次惨败的博客文章。它坚持自己的决定转移Kik名称,因为它的名称争议政策优先考虑用户的可预测性。它还研究了一些方法,如果一个包会破坏其他包的话,就更难取消发布它。然而,npm的帖子上的评论并不乐观。大多数开发人员似乎觉得Azer被扔到了车下,他们中的许多人已经在讨论寻找一个npm替代品。

在整个故事中,Azer、Kik和npm,Inc.宣布了对开源和JavaScript的坚定承诺。它们只是各自有一种稍微不同的表现方式。

  • 发表于 2021-05-04 00:13
  • 阅读 ( 183 )
  • 分类:互联网

你可能感兴趣的文章

你将来应该学习哪种编程语言?

...言来学习和掌握未来,那就没有什么可比性了:那一定是JavaScript。 ...

  • 发布于 2021-03-11 19:38
  • 阅读 ( 337 )

7所有网站开发人员都应该知道的编程技巧

... 三。javascript(js) ...

  • 发布于 2021-03-15 10:16
  • 阅读 ( 239 )

如何选择正确的web编程语言

...这在网络编程中尤其如此。主要有以web为中心的语言(如JavaScript)以及通用语言(如Java)。我们将集中讨论您应该问自己的问题,以确定要使用的正确web编程语言。 ...

  • 发布于 2021-03-16 01:36
  • 阅读 ( 241 )

通过我的5门顶级课程真正学习javascript

... 你为什么不学JavaScript? ...

  • 发布于 2021-03-17 09:52
  • 阅读 ( 227 )

前端与后端web开发:哪条路适合您?

... 前端代码应该是现代HTML、CSS和JavaScript的专家。 ...

  • 发布于 2021-03-18 15:23
  • 阅读 ( 201 )

最糟糕和最难避免的编程语言就像瘟疫一样

... 三。javascript语言 ...

  • 发布于 2021-03-21 17:33
  • 阅读 ( 235 )

7统一游戏开发语言学习:哪种最好?

... 2当前的替代方案:javascript ...

  • 发布于 2021-03-21 18:18
  • 阅读 ( 257 )

如何使用5个秘密设置加速microsoft edge

... 呈现限制是我们将要研究的两个JavaScript标志中的第一个。与CSS和HTML一样,JavaScript是web设计中使用的三种主要语言之一。它使网页具有交互性。 ...

  • 发布于 2021-03-25 14:02
  • 阅读 ( 513 )

什么是wordpress开发者?5种必备技能

... 4javascript语言 ...

  • 发布于 2021-03-26 19:49
  • 阅读 ( 466 )

通过这个完整的堆栈开发课程,在家学习编码

...单的计算器、网络刮板或数独游戏。 全栈Javascript课程:通过使用ReactJS、NodeJS、LoopbackJS等web应用的实践训练练习,学习Javascript开发。 完整的前端开发课程:深入研究标记语言(HTML5和CSS3)、jQuery和J...

  • 发布于 2021-03-29 09:01
  • 阅读 ( 236 )
cego0431
cego0431

0 篇文章