只有幾行代碼的庫(kù),坑了數(shù)百萬(wàn)個(gè)項(xiàng)目
只有幾行代碼的庫(kù),坑了數(shù)百萬(wàn) JS 項(xiàng)目
上周末,一個(gè) npm 小項(xiàng)目的更新給整個(gè) npm 生態(tài)系統(tǒng)制造了一場(chǎng)混亂,影響到了數(shù)百萬(wàn) JS 項(xiàng)目。
這個(gè)庫(kù)就是 is-promise ,僅包含了幾行代碼,其功能是讓開(kāi)發(fā)者測(cè)試一個(gè) JS 對(duì)象是否是 Promise,其它 JS 項(xiàng)目可通過(guò)一行代碼調(diào)用使用該庫(kù)。
盡管這個(gè)庫(kù)沒(méi)幾行代碼,但它卻是最流行的 npm 包之一,超過(guò) 340 萬(wàn)個(gè)項(xiàng)目使用。
上周末 is-promised 發(fā)布了一個(gè)更新,結(jié)果由于它不符合正確的 ES 模塊標(biāo)準(zhǔn),導(dǎo)致使用該庫(kù)的其它項(xiàng)目在構(gòu)建時(shí)出錯(cuò)。問(wèn)題并沒(méi)有導(dǎo)致現(xiàn)有 JS 項(xiàng)目崩潰,而主要無(wú)法編譯新版本。
許多知名的 JS 項(xiàng)目都受到影響,其中包括 Facebook 的 Create React App,Google 的 Angular.js 框架,Google 的 Firebasse-tools,亞馬遜的 AWS Serverless CLI,Nuxt.js 等等。
難道程序員連代碼都不會(huì)寫(xiě)了嗎?
npm 生態(tài)系統(tǒng)的依賴問(wèn)題,早在 2016 年就引發(fā)過(guò)類似事件,有一個(gè) NPM 庫(kù)開(kāi)發(fā)者撤回了他的代碼(代碼并不多,也就幾行),導(dǎo)致諸多重量級(jí)應(yīng)用(比如 React 和 Babel)都出問(wèn)題了。
四年前,這個(gè)事情就引發(fā)激烈討論。曾有人為此發(fā)出疑問(wèn):難道程序員連代碼都不會(huì)寫(xiě)了嗎?
舉例來(lái)說(shuō),有一個(gè)叫 isArray 的軟件包,當(dāng)時(shí)其一天的下載量有 88 萬(wàn),2016 年2 月有 1800 萬(wàn)次下載量,它本身就只有一行代碼。
NPM 生態(tài)系統(tǒng)中的許多開(kāi)發(fā)者,看起來(lái)寧愿復(fù)用其他人寫(xiě)好的代碼而不是自己寫(xiě)。這種做法存在嚴(yán)重的安全隱患,因?yàn)橐粋€(gè)被廣泛使用的軟件包存在bug,你的代碼也會(huì)受到影響,而你卻無(wú)法自己去修正。






















