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万次。