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