再見,Lodash
曾幾何時,Lodash 是前端項目中的“標(biāo)配工具庫”。無論是數(shù)組去重、對象合并,還是深拷貝、節(jié)流防抖,總少不了 import _ from 'lodash' 這一行。
但現(xiàn)在,情況變了。
這不是 Lodash 做錯了什么,而是時代變了:
- JavaScript 原生能力越來越強,
- 工具函數(shù)庫的使用場景更來曲化、碎片化,
- 新一代更輕量、模塊化的工具正在征服開發(fā)者。
所以,是時候說一聲:再見,Lodash。
Lodash 是什么?
LoLodash 是一個功能全面的 JavaScript 工具庫,最初發(fā)布于 2012 年。它的目標(biāo)是為 JavaScript 提供可靠、高效、可復(fù)用的工具函數(shù),尤其是在早期 JS 原生 API 不完善的年代。
它以函數(shù)式編程思想為核心,提供大量用于數(shù)組、對象、字符串、函數(shù)等處理的工具方法,并兼容 Node.js 和瀏覽器環(huán)境。
常見的功能包括:
- 數(shù)組操作:_.chunk(分塊數(shù)組)、_.difference(數(shù)組差異)、_.compact(移除假值)等;
- 對象處理:_.assign(合并對象)、_.pick(提取指定屬性)、_.omit(排除屬性)等;
- 字符串轉(zhuǎn)換:_.camelCase(轉(zhuǎn)駝峰)、_.trim(去除空格)等;
- 函數(shù)控制:_.debounce(防抖)、_.throttle(節(jié)流)、_.curry(柯里化)等。
在 Webpack、Gulp 等構(gòu)建工具剛興起的年代,Lodash 幾乎和 jQuery 一樣是每個項目的標(biāo)配。即使到了今天,Lodash 的 npm 每周下載量依然穩(wěn)定在七八千萬。
圖片
那么,為什么要放棄 Lodash?
Lodash 曾幫助無數(shù)開發(fā)者解決了繁雜的日常開發(fā)問題,但隨著前端的發(fā)展,它面臨的局限也越發(fā)明顯。
許多功能已被原生 JavaScript 替代
自從 ES6 開始,JavaScript 引入了大量原生方法,覆蓋了 Lodash 的許多常用函數(shù)。
Lodash 函數(shù) | 功能 | 原生 JavaScript 替代 |
| 查找符合條件的第一個元素 |
|
| 過濾符合條件的元素 |
|
| 轉(zhuǎn)換數(shù)組元素 |
|
| 歸約數(shù)組到單一值 |
|
| 合并對象 |
|
| 安全訪問嵌套屬性 | 可選鏈操作符 |
比如:
// 使用 Lodash:
const name = _.get(obj, 'user.profile.name');
// 使用原生 JS:
const name = obj?.user?.profile?.name;原生方法不僅語法簡潔、性能優(yōu)越,而且無需額外引入任何依賴。
體積問題難以忽視
Lodash 雖然支持模塊引入(比如 lodash-es),但實際使用中仍容易誤導(dǎo)入整包。
哪怕你只使用了 _.cloneDeep、_.merge 等少數(shù)幾個方法,如果不小心引入整包,壓縮后也可能多出十幾 KB 的體積。
而且在很多構(gòu)建環(huán)境下 Tree Shaking 效果并不理想,優(yōu)化成本并不低。
缺乏良好的 TypeScript 支持
Lodash 使用 JavaScript 編寫,雖然社區(qū)為其提供了 .d.ts 類型聲明文件,但體驗并不好。
- 類型推導(dǎo)不準(zhǔn)確,鏈?zhǔn)秸{(diào)用時尤為模糊;
- 高階函數(shù)如 _.map、_.filter 返回值類型容易丟失;
- 泛型支持較弱,與現(xiàn)代 TypeScript 項目格格不入。
如今 TypeScript 已經(jīng)幾乎成為前端默認選項,而 Lodash 明顯跟不上節(jié)奏。
項目更新停滯,生態(tài)不再活躍
Lodash 最近一次重大版本更新停留在 2020 年的 4.17.21,之后幾乎沒有實質(zhì)性進展。
- 潛在的安全漏洞未及時修復(fù),需要開發(fā)者手動用 audit 工具排查;
- 無法及時適配 ES2021+ 新特性;
- 不再適合用作現(xiàn)代項目的基礎(chǔ)工具庫。
換句話說,它已經(jīng)完成了自己的歷史使命。
那現(xiàn)在該用什么?
對于那些 JavaScript 已經(jīng)支持的特性,可以直接使用這些特性代替。
如果你需要一個現(xiàn)代化工具庫,現(xiàn)在有一個更好的選擇:ES-Toolkit。
什么是 ES-Toolkit?
ES-Toolkit 是一個由社區(qū)維護的現(xiàn)代工具函數(shù)庫,目標(biāo)是成為“輕量、高性能、類型安全”的實用工具集合。
它不是要做“大而全”的 Lodash 替代品,而是專注于“日常剛需”,即那些我們每天都在用、又懶得自己封裝的函數(shù)。
ES-Toolkit 的優(yōu)勢:
- 性能更高:基于原生方法和現(xiàn)代優(yōu)化,運行效率高出 Lodash 兩到三倍;
- 體積更小:支持 Tree Shaking,按需引入,體積可減少 90% 以上;
- 類型支持好:用 TypeScript 編寫,內(nèi)置類型定義,開發(fā)體驗順滑;
- 兼容性好:提供 es-toolkit/compat 模塊,可低成本替代 Lodash;
它已被多個知名項目采用,比如 Storybook、Recharts 和 CKEditor,社區(qū)反饋穩(wěn)定可靠。
// 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);更清晰、更現(xiàn)代、更省心。
Lodash vs ES-Toolkit
特性 | Lodash | ES-Toolkit |
性能 | 較慢,基于舊實現(xiàn) | 2-3 倍性能提升,現(xiàn)代優(yōu)化 |
捆綁包體積 | 較大(壓縮后約 24KB) | 最高減少 97%,支持樹搖優(yōu)化 |
TypeScript 支持 | 需額外安裝類型定義 | 內(nèi)置類型支持 |
維護狀態(tài) | 自 2020 年起未更新 | 活躍維護,最新版本 1.39.7 |
兼容性 | 廣泛支持舊環(huán)境 | 針對現(xiàn)代環(huán)境優(yōu)化,提供 Lodash 兼容層 |
如何遷移?
遷移并不復(fù)雜,通常包括以下幾個步驟:
- 安裝 ES-Toolkit:
npm install es-toolkit- 替換導(dǎo)入語句:
// 原來:
import _ from 'lodash';
const res = _.chunk(arr, 2);
// 替換為:
import { chunk } from 'es-toolkit';
const res = chunk(arr, 2);- 使用兼容層(可選):如果項目依賴大量 Lodash 函數(shù),可使用 es-toolkit/compat:
import { chunk } from 'es-toolkit/compat';- 跑測試:確認功能一致。
- 刪除 lodash:
npm uninstall lodash寫在最后
Lodash 曾經(jīng)是前端開發(fā)中不可或缺的一部分,它在我們最需要幫助的年代撐起了整個工具函數(shù)生態(tài)。
但今天,前端環(huán)境早已不同:
- JavaScript 本身越來越強大;
- TypeScript 成為標(biāo)配;
- 我們對性能、可維護性、類型安全的要求越來越高。
這不是否定 Lodash 的價值,而是承認我們已經(jīng)走到了另一個階段。
所以,是時候和它說一聲:
再見,Lodash。
也許不會懷念,但一定感激。


























