再见,Lodash。

内容分享2天前发布
0 2 0

再见,Lodash。

曾几何时,Lodash 是前端项目中的“标配工具库”。无论是数组去重、对象合并,还是深拷贝、节流防抖,总少不了 import _ from ‘lodash’ 这一行。

但目前,情况变了。

这不是 Lodash 做错了什么,而是时代变了:

  • JavaScript 原生能力越来越强,
  • 工具函数库的使用场景更来曲化、碎片化,
  • 新一代更轻量、模块化的工具正在征服开发者。

所以,是时候说一声:再见,Lodash

Lodash 是什么?

LoLodash 是一个功能全面的 JavaScript 工具库,最初发布于 2012 年。它的目标是为 JavaScript 提供可靠、高效、可复用的工具函数,尤其是在早期 JS 原生 API 不完善的年代。

它以函数式编程思想为核心,提供大量用于数组、对象、字符串、函数等处理的工具方法,并兼容 Node.js 和浏览器环境。

常见的功能包括:

  • 数组操作:_.chunk(分块数组)、_.difference(数组差异)、_.compact(移除假值)等;
  • 对象处理:_.assign(合并对象)、_.pick(提取指定属性)、_.omit(排除属性)等;
  • 字符串转换:_.camelCase(转驼峰)、_.trim(去除空格)等;
  • 函数控制:_.debounce(防抖)、_.throttle(节流)、_.curry(柯里化)等。

在 Webpack、Gulp 等构建工具刚兴起的年代,Lodash 几乎和 jQuery 一样是每个项目的标配。即使到了今天,Lodash 的 npm 每周下载量依然稳定在七八千万。

再见,Lodash。

那么,为什么要放弃 Lodash?

Lodash 曾协助无数开发者解决了繁杂的日常开发问题,但随着前端的发展,它面临的局限也越发明显。

许多功能已被原生 JavaScript 替代

自从 ES6 开始,JavaScript 引入了大量原生方法,覆盖了 Lodash 的许多常用函数。

Lodash 函数

功能

原生 JavaScript 替代

_.find

查找符合条件的第一个元素

Array.prototype.find

_.filter

过滤符合条件的元素

Array.prototype.filter

_.map

转换数组元素

Array.prototype.map

_.reduce

归约数组到单一值

Array.prototype.reduce

_.assign

合并对象

Object.assign

_.get

安全访问嵌套属性

可选链操作符 ?.

列如:

// 使用 Lodash:
const name = _.get(obj, 'user.profile.name');

// 使用原生 JS:
const name = obj?.user?.profile?.name;

原生方法不仅语法简洁、性能优越,而且无需额外引入任何依赖。

体积问题难以忽视

Lodash 虽然支持模块引入(列如 lodash-es),但实际使用中仍容易误导入整包。

哪怕你只使用了 _.cloneDeep、_.merge 等少数几个方法,如果不小心引入整包,压缩后也可能多出十几 KB 的体积。

而且在许多构建环境下 Tree Shaking 效果并不理想,优化成本并不低。

缺乏良好的 TypeScript 支持

Lodash 使用 JavaScript 编写,虽然社区为其提供了 .d.ts 类型声明文件,但体验并不好。

  • 类型推导不准确,链式调用时尤为模糊;
  • 高阶函数如 _.map、_.filter 返回值类型容易丢失;
  • 泛型支持较弱,与现代 TypeScript 项目格格不入。

如今 TypeScript 已经几乎成为前端默认选项,而 Lodash 明显跟不上节奏。

项目更新停滞,生态不再活跃

Lodash 最近一次重大版本更新停留在 2020 年的 4.17.21,之后几乎没有实质性进展。

  • 潜在的安全漏洞未及时修复,需要开发者手动用 audit 工具排查;
  • 无法及时适配 ES2021+ 新特性;
  • 不再适合用作现代项目的基础工具库。

换句话说,它已经完成了自己的历史使命。

那目前该用什么?

对于那些 JavaScript 已经支持的特性,可以直接使用这些特性取代。

如果你需要一个现代化工具库,目前有一个更好的选择:ES-Toolkit

什么是 ES-Toolkit?

ES-Toolkit 是一个由社区维护的现代工具函数库,目标是成为“轻量、高性能、类型安全”的实用工具集合。

它不是要做“大而全”的 Lodash 替代品,而是专注于“日常刚需”,即那些我们每天都在用、又懒得自己封装的函数。


ES-Toolkit 的优势:

  • 性能更高:基于原生方法和现代优化,运行效率高出 Lodash 两到三倍;
  • 体积更小:支持 Tree Shaking,按需引入,体积可减少 90% 以上;
  • 类型支持好:用 TypeScript 编写,内置类型定义,开发体验顺滑;
  • 兼容性好:提供 es-toolkit/compat 模块,可低成本替代 Lodash;

它已被多个知名项目采用,列如 Storybook、Recharts 和 CKEditor,社区反馈稳定可靠。

// Lodash:
import _ from 'lodash';
const result = _.chunk([1, 2, 3, 4], 2);

// ES-Toolkit:
import { chunk } from 'es-toolkit';
const result = chunk([1, 2, 3, 4], 2);

更清晰、更现代、更省心。

Lodash vs ES-Toolkit

特性

Lodash

ES-Toolkit

性能

较慢,基于旧实现

2-3 倍性能提升,现代优化

捆绑包体积

较大(压缩后约 24KB)

最高减少 97%,支持树摇优化

TypeScript 支持

需额外安装类型定义

内置类型支持

维护状态

自 2020 年起未更新

活跃维护,最新版本 1.39.7

兼容性

广泛支持旧环境

针对现代环境优化,提供 Lodash 兼容层

如何迁移?

迁移并不复杂,一般包括以下几个步骤:

  1. 安装 ES-Toolkit
npm install es-toolkit
  1. 替换导入语句
// 原来:
import _ from 'lodash';
const res = _.chunk(arr, 2);

// 替换为:
import { chunk } from 'es-toolkit';
const res = chunk(arr, 2);
  1. 使用兼容层(可选):如果项目依赖大量 Lodash 函数,可使用 es-toolkit/compat:
import { chunk } from 'es-toolkit/compat';
  • 跑测试:确认功能一致。
  • 删除 lodash
npm uninstall lodash

写在最后

Lodash 曾经是前端开发中不可或缺的一部分,它在我们最需要协助的年代撑起了整个工具函数生态。

但今天,前端环境早已不同:

  • JavaScript 本身越来越强劲;
  • TypeScript 成为标配;
  • 我们对性能、可维护性、类型安全的要求越来越高。

这不是否定 Lodash 的价值,而是承认我们已经走到了另一个阶段。

所以,是时候和它说一声:

再见,Lodash。

也许不会怀念,但必定感激。

© 版权声明

相关文章

2 条评论

  • 头像
    食腐仙音 投稿者

    lodash也可以按需依赖,不用整个都导入

    无记录
    回复
  • 头像
    猥琐了_蒙庆园 投稿者

    收藏了,感谢分享

    无记录
    回复