写点什么

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:137214
用户头像

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

关注

评论

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

Flink 任务调度策略:Eager 模式详解

木南曌

flink 实时计算

pyhttptest 实操指南:测试RESTful API的有效方法

Liam

测试 后端 测试工具 REST API pyhttptest

Flink 任务调度策略:Lazy from Sources 深入解析

木南曌

实时计算

软件测试丨什么是性能测试?

测试人

软件测试

坚定投入核心软件!腾讯云数据库TDSQL荣获深圳市科技进步奖一等奖

Geek_2d6073

3CX的介绍

cts喜友科技

通信 通讯 云通讯 通信通讯

鸿蒙HarmonyOS实战-Stage模型(开发卡片事件)

EquatorCoco

microsoft 华为 鸿蒙系统

NumPy 数组排序、过滤与随机数生成详解

不在线第一只蜗牛

Python 数组 排序 Numpy

一文看懂分布式链路追踪

乘云数字DataBuff

应用性能监控 分布式链路追踪

低代码开发在医疗健康领域中的应用研究

EquatorCoco

低代码 医疗健康

如何提高python程序代码的健壮性

我再BUG界嘎嘎乱杀

Python 编程 后端 软件开发

LLM实战:当网页爬虫集成gpt3.5

不在线第一只蜗牛

GPT LLM

学Python的别告诉我你还不造celery是干嘛的

我再BUG界嘎嘎乱杀

Python 编程 后端 软件开发 celery

第52期|GPTSecurity周报

云起无垠

AIGC LLMs

企业需要SD-WAN的十大理由

Ogcloud

SD-WAN 企业组网 SD-WAN组网 SD-WAN服务商 SDWAN

AI 新质生产力创新先锋 焱融科技入选中国生成式AI企业TOP50

焱融科技

人工智能 高性能存储 软件定义存储 新质生产力

基于向量检索服务与TextEmbedding实现语义搜索

DashVector

AI 向量检索 大模型 语义搜索

华为云CodeArts 12大安全防护机制,端到端全面保障软件供应链安全!

华为云PaaS服务小智

云计算 软件开发 华为云

斯嘉丽·约翰逊指控 OpenAI 非法使用其声音;微软推出AI 工具「回顾」(Recall)丨RTE 开发者日报 Vol.208

声网

微店商品API接口:电商数据集成的新利器

Noah

如何提升金融业务效率的同时保障身份认证安全和用户体验(一)

芯盾时代

金融 手机银行 iam 统一身份认证 银行业

win版iSpring Suite (PowerPoint转Flash工具) v11.7.0 Build 5 (x64)激活版下载

iMac小白

如何开展性能测试?性能测试的流程是什么样子?

测试人

软件测试 性能测试 自动化测试 测试开发

关于接口协议,你必须要知道这些!

霍格沃兹测试开发学社

PHP反射API与接口的动态分析

技术冰糖葫芦

API boy API 文档 API 性能测试

数据驱动选品:阿里巴巴商品详情API在电商选品中的应用

tbapi

阿里巴巴 阿里巴巴API接口 阿里巴巴商品详情数据接口

视频标注已上线,支持视频分类、多目标检测|ModelWhale 版本更新

ModelWhale

计算机视觉

OpenAI“杀疯了”,GPT–4o模型保姆级使用教程!一遍就会!

快乐非自愿限量之名

openai GPT

互联网行业,什么人看起来“必成大器”?

秃头小帅oi

构建稳健、高效与安全的企业级API网关

RestCloud

API API网关 ipaas

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