BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Underscore和Lodash商讨合并事宜

| 作者 David Iffland 关注 4 他的粉丝 ,译者 刘振涛 关注 22 他的粉丝 发布于 2015年6月20日. 估计阅读时间: 5 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

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


感谢张龙对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT