Underscore和Lodash商討合并事宜
Underscore和Lodash是兩個較為流行的JavaScript庫,二者長久以來一直處于競爭關系,目前他們正在商討合并事宜。二者合并將會是開發者的一大福利,但在目前看來,二者皆有極強的個性,最終可能難以統一意見。
上周,Underscore的創造者Jeremy Ashkenas在一條 Github issue 中向Lodash的創造者John-David Dalton表明合并兩個庫的意愿。社區認為這是一個極為瘋狂的想法,雙方的支持者都堅持認為己方應主導合并后的代碼。
對于一些人來說,lodash是唯一選擇,他們認為underscore更像是一款在相對寬松的環境中使用的玩具, Nijiko Yonskai說道 :“為什么不只抨擊underscore呢?Lodash顯然更為成熟,并引導著二者的發展方向”,他繼續說道:
合并這兩個項目沒有意義,除非在合并時拋棄underscore,只使用lodash的代碼。二者皆為不同目的而生,Lodash更全面,更可靠并且維護得更好。
lodash的一大亮點在于其模塊化:開發者可以按需加載,而非引用整個庫。每一個模塊都暴露在npm中,所以開發者可以獨立地引用它們:
npm install lodash.map var map = require('lodash.map');
每個項目都從不同的角度描述文檔。Underscore用一種侃侃而談的語調,lodash則保持更加正式的風格。舉個例子,二者的文檔中這樣描述each函數:
遍歷list中的所有元素,按順序用遍歷輸出每個元素。如果傳遞了context參數,則把iteratee綁定到context對象上。每次調用迭代器都會傳遞三個參數:(element, index, list)。如果list是個JavaScript對象,迭代器的參數是 (value, key, list))。返回list以方便鏈式調用。
遍歷collection中的所有元素并為每個元素調用迭代器,迭代器綁定到thisArg并且傳遞三個參數進行調用:(value,index或key,collection)。如果顯式返回false則迭代器函數提前退出迭代。
在InfoQ的采訪中,Dalton說他愿意接觸Ashkenas是因為他們對于JavaScript庫有相同的愿景:
我們有相同的目標,大部分(60%左右)的API相同,并且擁有許多重合的貢獻者,二者合并有利于減少重復工作,可以簡化選型復雜度并更好地支持開發者們。
但是如何整合尚不明確,Ashkenas在Github上一個Underscore貢獻者的 獨立討論 中說:
沒有必要強行合并二者并發布一個不靠譜的東西,這會增加短期內的復雜度。我認為設想一個大家一致認同的“Underscore 2.0”并努力實現這一目標相對更有價值。
當被問及合并事宜時, Babel 的貢獻者James Kyle認為,現狀不會改變。“所有的一切會一如既往地發展著,Lodash會緩慢更新,但是一定會徹底替代Underscore”。他信心十足,然而:
現今的JavaScript社區里有太多的重復性工作,主要的原因是人們不能在意見產生分歧時達成合理的一致意見。Lodash可以通過少許改變輕松地匹配Underscore,但如果Underscore不在某些問題上讓步,我個人認為他們最終沒有合并的希望。
Underscore.js 和 Lodash 是最常用的JavaScript庫,在過去的一個月中,他們在 npm 中的下載量累計達200萬次。
查看英文原文: Underscore and Lodash Discuss Merging