来源自:http://www.techug.com/node-js-community

  几天前,一名 NPM(Node.js Package Manager)社区的贡献者 Azer Koçulu 出于对 NPM 管理层的怨愤,不声不响删除了自己在 NPM 上面的全部代码,其中就包含只有 11 行代码的“Left-pad”,没想到从中国北京到美国硅谷,从大学宿舍学习 Node.js 的新手到 Facebook 的资深工程师,整个互联网界都炸开了锅,他们手中的许多 Node.js 模块,全罢工了。

虽然 NPM 管理员在危机发生后采用强制重新编写发布了 Azer Koçulu 的代码,但是这次 NPM 风波无疑意义深远。

  要理解 NPM,首先就要知道 Node.js。Node.js 是基于 Javascript 语言的后端编程框架,开发网站用的语言,可以理解为 PHP 的替代品。Node.js 最明显的特征在于,除了使用 Javascript 语言,同时还拥有许许多多公用的模块,都由来自世界各地的开发者贡献,这些模块使用 NPM 管理,NPM 就有点像苹果的 App 商店,只不过这些模块都是免费的。

  Azer Koçulu 本来是 NPM 的热情粉丝,经常为 NPM 贡献代码,其中之一就有个叫 Kik 的模块,但是这个模块可能是功能简陋,也可能是知名度不高,反正用的人很少,没什么存在感。巧巧合的是,刚好有一家公司也叫 Kik,是一款类似微信的社交工具。

  Kik 公司也要在 NPM 社区用到 Kik 这个名字,于是就给 Azer Koçulu 发律师函,义正言辞要求他把自己的 Kik 换成别的,否则会有律师找上门。Azer Koçulu 觉得 Kik 公司说的很有道理,然后拒绝了。毕竟取名不应该先到先得吗?凭啥你说什么我就信什么,凭什么你要我做啥我就做啥。而且我又没做错什么,我在刚开始编写 Kik 模块时候并不知道有 Kik 这个公司。

  Kik 公司交涉失败,直接就向 NPM 官方投诉了,没多久,NPM 社区管理员没经过 Azer Koçulu 本人同意,就把他在 NPM 上面的 Kik 模块的控制权交给了别人。

这下 Azer Koçulu 简直要爆炸了,对于 NPM 大失所望,没想到 NPM 社区是这种玩意,保护大公司,漠视个人开发者。这简直就是对自己价值观的奇耻大辱。

愤怒难抑,Azer Koçulu 决定复仇,他要和 NPM 决裂,一下子删光了自己在 NPM 上面的所有代码。其中就包括流行组件“left-pad”。这个组件只有 11 行,功能很简单,就是在给定的字符串左边重复插入给定的字符,以达到需要的字符串长度。

  这个 Node.js 模块虽然简单,但是应用非常广泛,下载量超过 57 万次。Facebook、Spotify 以及 Netflix 等著名公司大型软件项目中都用到了 Babel 这个模块,而 Bel 本来这个模块又调用了“left-pad”这个模块。同时受影响的还有当今非常著名的 React 框架,这个框架帮助前端工程师更便捷地开发网站界面,全世界同时学习 React 框架的程序员可能数百万,但是突然就都不能用了。据 NPM 官方博客,“left-pad”删除后,受到影响的模块达到数千个。

  这就像飞机的发动机突然掉了一颗螺丝,点火时候系统就肯定会报错,但是你却很难定位为题的出处。毕竟 Node.js 采用连环套的设计思想,你调用的模块可能调用了其他模块,其他模块也调用了自己的其他模块,一层又一层,代码量千千万,定位并修复所有的问题代码,实在工程浩大。

  这场意外迅速在 Twitter、以及微博上炸开了锅,众多网友反应 React、Babel、Ember 无法使用,数小时后也有网友反映 Babel 已经推出了紧急修补版。

  意外发生 4 个多小时后,NPM 社区管理员决定出手,把“left-pad”这个名字从 Azer Koçulu 手中夺了回来,重新写了一个“left-pad”函数,终于才抚平了千万程序员躁动的心。

  这次意外发生后,众多开发者开始怀疑 NPM 的管理能力,庞大的 Node.js 社区竟然危机四伏,今后如果有贡献者误操作或密码被盗,全世界无数的 Node.js 开发者瞬间无法工作。同时也有人开始怀疑 NPM 的设计哲学,为什么不设计官方标准库,而是把十来行,甚至只有 1 行的代码设计成独立的模块。比如有个叫 isArray 的模块,下载量达到 88 万次,其实只有 1 行代码而已。

程序员的复仇:11行代码如何让Node.js社区鸡飞狗跳的更多相关文章

  1. 深受C/C 程序员欢迎的11款IDE

    几十年过去了,C和C++作为主要的高级的程序设计语言,在全球范围内仍然广受欢迎,并牢牢占据着TIOBE编程语言排行榜前5名,应用程序和系统的开发离不开这两门语言,现在我们来总结一下近些年来,深受C/C ...

  2. 别人的双11 & 程序员的双11~

    双11,致敬所有的程序员欧巴! 愿代码的世界,只有爱,没有伤害!! ​ 点此参加阿里云双十一拼团活动:https://m.aliyun.com/act/team1111/ 阅读原文

  3. 腾讯微信支付,程序员是如何让jQuery代码付钱的

    微信支付和支付宝支付已经是我们生活中不可确实的两个金融软件了,也是必备的,小编认为小钱用微信,大钱用支付宝. 下面这个图是我们生活中用腾讯微信支付平台的最后一个页面,大家想不想知道这个页面是如果做出来 ...

  4. 程序员新人怎样在复杂代码中找 bug?

    分享下我的debug的经验 1. 优先解决那些可重现的,可重现的bug特别好找,反复调试测试就好了,先把好解决的干掉,这样最节约时间. 2. 对于某些bug没有头绪或者现象古怪不知道从哪里下手,找有经 ...

  5. (转)程序员新人怎样在复杂代码中找 bug?

    我曾经做了两年大型软件的维护工作,那个项目有10多年了,大约3000万行以上的代码,参与过开发的有数千人,代码checkout出来有大约5个GB,而且bug特别多,open的有上千,即使最高优先级的s ...

  6. alexNet--deep learning--alexNet的11行代码

    % Copyright 2016 The MathWorks, Inc. clear camera = webcam(  2  ); % Connect to the camerannet = ale ...

  7. 11慕课网《进击Node.js基础(一)》Buffer和Stream

    Buffer 用来保存原始数据 (logo.png) 以下代码读取logo.png为buffer类型 然后将buffer转化为string,新建png 可以将字符串配置: data:image/png ...

  8. 代码规范 for node.js with 'npm-coding-style'

    npm-coding-style npm's "funny" coding style Description npm's coding style is a bit unconv ...

  9. 程序员减少代码BUG的7种方法,拒绝编程5分钟,查代码2小时!

    0.别对警告视而不见 相信不少的程序员会使用IDEA,使用它敲代码,有时候会出现警告,那么这时你对警告就不能视而不见了. 我们的目标是,写干净的代码,做风一样的男子! 1.编程习惯 种瓜得瓜种豆得豆, ...

随机推荐

  1. Linux:Linux 重要人物

    1.Ken Thompson:C 语言之父和 UNIX 之父 2.Dennis Ritchie:C 语言之父和 UNIX 之父 3.Stallman:著名黑客,GNU 创始人,开发了 Emacs.gc ...

  2. JS获取元素CSS值的各种方法分析

    先来看一个实例:如何获取一个没有设置大小的字体? <!DOCTYPE html> <html lang="en"> <head> <met ...

  3. 海康威视 NET_DVR_FindFile NET_DVR_PlayBackByTime 尝试读取或写入受保护的内存,这通常指示其他内存已损坏

    从农民伯伯那下载的代码 NET_DVR_PlayBackByTime NET_DVR_FindFile 这两个方法执行不了 下面是我改的 经过测试了 [DllImport("HCNetSDK ...

  4. html-css样式表

    一.CSS:Cascading Style Sheet—层叠样式表,其作用是美化HTML网页. 样式表分类:内联样式表.内嵌样式表.外部样式表 1.内联样式表 和HTML联合显示,控制精确,但是可重用 ...

  5. wicket基本控件使用笔记

    Label       new Label(“message”,”message content”); MutLineLabel         new MutlineLabel(“message”, ...

  6. Leetcode 111 Minimum Depth of Binary Tree 二叉树

    找出最短的从叶子到根的路径长 可以回忆Maximum Depth of Binary Tree的写法,只不过在!root,我把它改成了10000000,还有max函数改成了min函数,最后的值如果是1 ...

  7. bzoj 3399: [Usaco2009 Mar]Sand Castle城堡

    3399: [Usaco2009 Mar]Sand Castle城堡 Time Limit: 3 Sec  Memory Limit: 128 MB Description 约翰用沙子建了一座城堡.正 ...

  8. IUnknown—COM和MFC

    http://www.vckbase.com/index.php/wv/60 问题: 我用MFC编写COM程序有一段时间了,知道如何使用宏和嵌套类,以及如何在嵌套类中处理IUnknown接口,但对IU ...

  9. AngularJS和DataModel

    通常,在AngularJS中使用JSON作为存储数据的模型.我们可能这样在controller中写model: app.controller('BookController',['$scope',fu ...

  10. 闲暇时间开发的个人app

    最近一段时间公司不是很忙,晚上基本没怎么加班.所以自己利用晚上在家的时间开发了一个app(奇趣营),其实自从转android开发以来,就有想过要自己开发一个app.一方面可以提升自己的经验:另一方面可 ...