写点什么

Underscore 和 Lodash 商讨合并事宜

  • 2015-06-19
  • 本文字数:1371 字

    阅读完需:约 4 分钟

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.js Lodash 是最常用的 JavaScript 库,在过去的一个月中,他们在 npm 中的下载量累计达 200 万次。

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


感谢张龙对本文的审校。

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

2015-06-19 07:137594
用户头像

发布了 63 篇内容, 共 137.2 次阅读, 收获喜欢 38 次。

关注

评论

发布
暂无评论
发现更多内容

CompletableFuture实现异步转同步

FunTester

NFTScan 正式上线 Fantom 网络 NFTScan 浏览器和 NFT API 数据服务

NFT Research

NFT 数据基础设施

简单概述Serverless

天翼云开发者社区

SparK 用稀疏掩码为卷积设计 Bert 预训练

Zilliz

计算机视觉

工业生产环境下,时序数据库 TDengine 如何打造全面有效的数字化监控?

TDengine

数据库 tdengine 时序数据库

新年新气象,老兵开新坑

致知Fighting

Java Go 服务器

带你读论文丨S&P21 Survivalism: Living-Off-The-Land 经典离地攻击

华为云开发者联盟

人工智能 华为云 论文 企业号 2 月 PK 榜 华为云开发者联盟

如何让OpenHarmony编译速度“狂飙”

离北况归

OpenHarmony

如何通过jstat命令进行查看堆内存使用情况

华为云开发者联盟

后端 开发 华为云 企业号 2 月 PK 榜 华为云开发者联盟

基于GIS+WebGL智慧消防3D可视化云控系统

2D3D前端可视化开发

智慧消防 消防物联网云平台 消防三维可视化 智慧消防系统 消防云控平台

聊聊Docker镜像

天翼云开发者社区

Docker 镜像

线上网络丢包引起的接口响应时间过慢,快速排查案例

KINDLING

Java 运维 网络 丢包 eBPF&Linux

单线程架构的Redis如此之快的 4 个原因

JAVA旭阳

redis 缓存

谈谈我工作中的23个设计模式

阿里巴巴中间件

阿里云 云原生

R2M分布式锁原理及实践

京东科技开发者

redis 框架解析 企业号 2 月 PK 榜 r2m 分布式锁原理

sun4.0泰山众筹模式项目系统开发技术讲解放哪(Demo)

I8O28578624

实战分享 | 金融数据采集报送平台实践

葡萄城技术团队

MySQL中的distinct和group by哪个效率更高?

Steven

理论+实践,教你如何使用Nginx实现限流

华为云开发者联盟

后端 开发 华为云 企业号 2 月 PK 榜 华为云开发者联盟

LeaRun快速开发平台:自由搭建个性化门户

力软低代码开发平台

9种跨域方式实现原理

华为云开发者联盟

开发 华为云 企业号 2 月 PK 榜 华为云开发者联盟

OpenHarmony标准系统内核学习【2】CPU轻量级隔离特性

离北况归

OpenHarmony

行云洞见|为何行业权威都预测“云原生IDE 将成为常态”?

行云创新

ide 云原生 云端IDE Cloud IDE TitanIDE

单线程 Redis 如此之快的 4 个原因

C++后台开发

redis 中间件 后端开发 单线程 C++开发

APISIX Ingress 如何使用 Cert Manager 管理证书

API7.ai 技术团队

证书 api 网关 APISIX Ingress Controller

Underscore和Lodash商讨合并事宜_开源_David Iffland_InfoQ精选文章