Underscore和Lodash商討合并事宜

jopen 9年前發布 | 6K 次閱讀 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函數:

Underscore

遍歷list中的所有元素,按順序用遍歷輸出每個元素。如果傳遞了context參數,則把iteratee綁定到context對象上。每次調用迭代器都會傳遞三個參數:(element, index, list)。如果list是個JavaScript對象,迭代器的參數是 (value, key, list))。返回list以方便鏈式調用。

Lodash

遍歷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.jsLodash 是最常用的JavaScript庫,在過去的一個月中,他們在 npm 中的下載量累計達200萬次。

查看英文原文: Underscore and Lodash Discuss Merging

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!