再見,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 曾幫助無數開發者解決了繁雜的日常開發問題,但隨著前端的發展,它面臨的局限也越發明顯。
許多功能已被原生 JavaScript 替代
自從 ES6 開始,JavaScript 引入了大量原生方法,覆蓋了 Lodash 的許多常用函數。
Lodash 函數 | 功能 | 原生 JavaScript 替代 |
| 查找符合條件的第一個元素 |
|
| 過濾符合條件的元素 |
|
| 轉換數組元素 |
|
| 歸約數組到單一值 |
|
| 合并對象 |
|
| 安全訪問嵌套屬性 | 可選鏈操作符 |
比如:
// 使用 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。
也許不會懷念,但一定感激。


























