曾几何时,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 曾协助无数开发者解决了繁杂的日常开发问题,但随着前端的发展,它面临的局限也越发明显。
许多功能已被原生 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 兼容层 |
如何迁移?
迁移并不复杂,一般包括以下几个步骤:
- 安装 ES-Toolkit:
npm install es-toolkit
- 替换导入语句:
// 原来:
import _ from 'lodash';
const res = _.chunk(arr, 2);
// 替换为:
import { chunk } from 'es-toolkit';
const res = chunk(arr, 2);
- 使用兼容层(可选):如果项目依赖大量 Lodash 函数,可使用 es-toolkit/compat:
import { chunk } from 'es-toolkit/compat';
- 跑测试:确认功能一致。
- 删除 lodash:
npm uninstall lodash
写在最后
Lodash 曾经是前端开发中不可或缺的一部分,它在我们最需要协助的年代撑起了整个工具函数生态。
但今天,前端环境早已不同:
- JavaScript 本身越来越强劲;
- TypeScript 成为标配;
- 我们对性能、可维护性、类型安全的要求越来越高。
这不是否定 Lodash 的价值,而是承认我们已经走到了另一个阶段。
所以,是时候和它说一声:
再见,Lodash。
也许不会怀念,但必定感激。
lodash也可以按需依赖,不用整个都导入
收藏了,感谢分享