2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

【YashanDB知识库】自动选举配置错误引发的一系列问题

YashanDB

yashandb 崖山数据库 崖山DB

AI技术修复奥运珍贵历史影像,《永不失色的她》再现百年奥运女性光彩

阿里云CloudImagine

云计算 音视频 AI技术 视频云 奥运会

新版HAP应用市场即将推出,诚邀意向开发者提前入驻,抢占先机

明道云

穿越流程管理的丛林!Prothentic学院「流程管理培训」第1期圆满落幕

望繁信科技

业务流程管理 望繁信科技 流程管理培训 陈果George Prothentic学院

InPlant SCADA笔记 工程属性中的经典模式

万里无云万里天

工厂运维 InPlant SCADA

螺旋文字滚动特效源码解析

南城FE

CSS 前端 动画

一枚与时间赛跑的中国芯片

脑极体

AI

macOS Ventura 13.6.8 (22G820) 正式版发布,ISO、IPSW、PKG 下载

sysin

macos ISO ventura

wamp配置多目录访问方法

tbapi

wamp

【YashanDB知识库】ycm纳管主机安装YCM-AGENT时报错“任务提交失败,无法连接主机”

YashanDB

yashandb 崖山数据库 崖山DB

【YashanDB知识库】ycm托管数据库时,数据库非OM安装无法托管

YashanDB

yashandb 崖山数据库 崖山DB

InPlant SCADA笔记 工程管理界面的五种风格

万里无云万里天

工厂运维 InPlant SCADA

【Hbase】运维问题汇总

扬_帆_起_航

闲鱼开发者必读:如何利用闲鱼商品列表数据接口进行数据分析

tbapi

闲鱼API 闲鱼商品列表接口 闲鱼商品列表数据接口 闲鱼商品列表数据采集

大咖公开课 | 大模型场景讲解以及测试方法

测试人

软件测试

在 Go 中如何使用反射实现简易版 encoding/json

江湖十年

Go json 后端

(代购系统神器)深入解析1688平台API:商品图片与详情描述的获取之道

代码忍者

API 文档 API 测试 API 设计

【YashanDB知识库】账号被锁,如何分析具体原因

YashanDB

yashandb 崖山数据库 崖山DB

macOS Monterey 12.7.6 (21H1320) 正式版发布,ISO、IPSW、PKG 下载

sysin

macos ISO ventura

面向物联网的 NGINX Plus:对 MQTT 流量进行加密和身份验证

NGINX开源社区

负载均衡 开源 物联网 IoT mqtt

智源发布三款BGE新模型,再次刷新向量检索最佳水平

智源研究院

再获奖项,亚信安慧AntDB数据库被评为“2023-2024国产数据库创新赋能优秀产品”

亚信AntDB数据库

利用人工智能ChatGPT自动生成基于PO的数据驱动测试框架

测试人

软件测试

硅纪元视角 | 6秒生成4张图,Getty Images和英伟达联合推出文生图AI模型

硅纪元

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