包管理器(PackageManager),托管了最多数量的JS代码,就更加不可能不知道。
JavaScript是一种直译式脚本语言,主要用在网页上,通过在网页中嵌入JS模块,可以赋予网页动态交互功能,使之更加流畅美观,也能极大地减少网页开发成本。推出20年来JS已经成为事实上的HTML标准,在网站开发当中应用非常广泛,后来有了自带GoogleV8JS引擎的NODEjs,进一步扩展了这款简洁明了语言的使用范围。
而NPM就是一款基于NODEjs的包管理器,开发者利用它可以很方便地借用其他人贡献的开源代码,快速做出属于自己的网络应用。
李嘉明只是简单搜了一下,就立即明白NPM果然是粗大事了。
这种软件包管理器是用来管理开源软件的,开发者可以将自己觉得有用的软件或模块组件发布到这里,允许其他开发者按需下载组装成属于他的软件,然后再次发布。
由于相关组件的查找、下载、组装、升级等工作都有PM软件高效完成,大家也就习惯了需要某个功能时优先使用现成软件包,而不是自己动手码一个的习惯。特别是那些简单、常用的功能模块,因为其简单常用往往拥有非常多的引用下载数,热门组件的日下载数更是可以达到几十万甚至之多。
也就是说只要开发者把这个组件更改甚至删除,就可能影响到其他几十万个次的软件运行。
更糟糕的是,这种关系还可以传递:A软件依赖b、c包里面的内容,bc包又需要def包,导致A软件间接依赖def的情况。也就是说看似风马牛不相及的def软件包中任意一个出问题,A软件的运行就有可能受影响,如果A软件的开发者刚好偷了懒,为其设置了运行前检查更新的功能,那他100%要杯具。
也不是没人看出其中蕴含的问题和风险,但是谁都没当一回事儿,至少NPM的运营公司和使用者都没理会这个问题。然后这个问题就在今天爆发了出来,以人为引发的方式。
有位开发者indGirl删除了她名下全部57个软件包,导致依赖他们的1468个包报错,进一步引起五位数软件包的报错,受影响的软件和网络应用不下5万……
虽然NPM方面已经紧急恢复了被删除的软件包,堵住源头使得报错链条被打断,但是受此惊吓,使用这个工具的开发者们可不能当啥事都没有发生,要么修改软件代码断开这种依赖关系(比如把需要的代
本章未完,请点击下一页继续阅读!