es-toolkit logo

es-toolkit

一个高性能、现代化的 JavaScript 工具库,比 Lodash 快 2-3 倍,包体积减小高达 97%,被誉为"现代 Lodash 的最佳替代品"。

精选工具工具函数高性能TypeScriptLodash替代

es-toolkit 是由 Toss 开发的现代 JavaScript 工具库,利用最新 JS 特性重新实现常用工具函数。提供完整兼容 Lodash 的迁移层(compat)和函数式编程入口(fp),原生 TypeScript 支持,零依赖。被 Storybook、MUI、Recharts 等知名项目采用,npm 周下载量超 1000 万次,GitHub 11k+ Stars。

es-toolkit

一个高性能、现代化的 JavaScript 工具库,比 Lodash 快 2-3 倍,包体积减小高达 97%,被誉为"现代 Lodash 的最佳替代品"。

技术简介说明

es-toolkit 是由韩国金融科技公司 Toss(Viva Republica, Inc.)开发并开源的现代 JavaScript 实用工具库。它诞生于 2024 年,旨在解决 Lodash 在现代化 JavaScript 开发中的痛点——包体积过大、Tree-shaking 不友好、TypeScript 类型支持滞后等问题。es-toolkit 通过利用最新的 JavaScript 语言特性(如 MapSetstructuredClone 等)重新实现了常用的工具函数,在保证功能完整性的同时,实现了显著的性能提升和体积缩减。

es-toolkit 的核心价值在于:它提供了一个完整兼容 Lodash 的迁移层es-toolkit/compat),使得现有 Lodash 项目可以无缝切换;同时其原生 API 采用了更现代、更安全的设计,原生支持 TypeScript 类型推导,且默认支持 Tree-shaking。截至 2026 年,es-toolkit 已被 Storybook、Recharts、MUI、ink、CKEditor 等知名开源项目采用,npm 周下载量超过 1000 万次。

2026 年 6 月发布的 v1.49.0 版本新增了 es-toolkit/fp 入口点,提供数据在后(data-last)、可管道组合的函数式编程接口,进一步丰富了函数式编程生态。

基本信息

  • 官网:https://es-toolkit.dev
  • GitHub:https://github.com/toss/es-toolkit
  • License:MIT
  • 最新版本:v1.49.0(2026 年 6 月 26 日发布)
  • GitHub Stars:11k+
  • 主要维护者/公司:Toss(Viva Republica, Inc.)
  • npm 周下载量:1000 万+
  • TypeScript 支持:原生内置(从实现代码直接生成类型)

快速上手

安装

# npm
npm install es-toolkit
 
# yarn
yarn add es-toolkit
 
# pnpm
pnpm add es-toolkit
 
# Bun
bun add es-toolkit
 
# Deno (通过 JSR)
deno add jsr:@es-toolkit/es-toolkit

浏览器(CDN 方式):

<!-- 使用 jsdelivr,暴露全局变量 _ -->
<script src="https://cdn.jsdelivr.net/npm/es-toolkit@^1"></script>
<script>
  var arr = _.chunk([1, 2, 3, 4, 5, 6], 3);
</script>
 
<!-- 使用 esm.sh,ES Module 方式 -->
<script type="module">
  import { chunk } from 'https://esm.sh/es-toolkit';
  chunk([1, 2, 3, 4, 5, 6], 3);
</script>

基础配置

es-toolkit 无需额外配置,安装后即可直接使用。它提供多个入口点以满足不同场景:

// 默认入口 —— 现代、高性能 API
import { chunk, sum, debounce } from 'es-toolkit';
 
// 兼容入口 —— 与 Lodash 100% 行为兼容
import { chunk, sum, debounce } from 'es-toolkit/compat';
 
// 函数式编程入口 —— data-last,支持管道组合
import { chunk, sum, debounce } from 'es-toolkit/fp';

最小示例

import { chunk, sum, debounce, pick } from 'es-toolkit';
 
// 数组分块
chunk([1, 2, 3, 4, 5, 6], 3);
// => [[1, 2, 3], [4, 5, 6]]
 
// 数组求和
sum([1, 2, 3]);
// => 6
 
// 防抖函数
const save = debounce((data) => {
  console.log('saving...', data);
}, 300);
 
// 对象裁剪
pick({ a: 1, b: 2, c: 3 }, ['a', 'c']);
// => { a: 1, c: 3 }

核心概念与架构

es-toolkit 的架构设计遵循以下核心原则:

  1. 多入口点架构:提供三个独立的入口点,分别服务于不同需求:

    • es-toolkit:原生现代 API,不追求与 Lodash 的行为一致,而是采用更安全、更符合现代 JavaScript 的设计
    • es-toolkit/compat:完整兼容 Lodash 行为,通过 Lodash 官方测试套件验证,支持无缝迁移
    • es-toolkit/fp:函数式编程风格,data-last 参数顺序,支持 pipe() 组合
  2. 现代 JavaScript 优先:充分利用 MapSetstructuredCloneArray.prototype.at() 等现代 API,而非 Lodash 中为兼容旧环境而使用的 polyfill 实现

  3. TypeScript 原生:类型定义直接从实现代码生成,而非像 @types/lodash 那样独立维护,确保类型与运行时行为完全一致

  4. 零依赖:es-toolkit 不依赖任何第三方包,所有功能均为自实现

核心特性

  • 极致性能:平均比 Lodash 快 2-3 倍,部分函数(如 pickomit)快 3-4 倍
  • 超小体积:单个函数体积比 Lodash 减少 72%-98%,如 sample 仅 94 字节(Lodash 为 4817 字节)
  • 原生 TypeScript:类型从实现代码直接生成,类型推导精确,无需额外安装 @types
  • 完整 Tree-shaking 支持:基于 ESM 设计,未使用的函数在打包时自动移除
  • Lodash 兼容层es-toolkit/compat 通过 Lodash 官方测试验证,支持渐进式迁移
  • 函数式编程支持:v1.49.0 新增 es-toolkit/fp 入口,提供 data-last、pipeable 的函数式 API
  • 100% 测试覆盖:所有函数均有完整的单元测试覆盖
  • 多环境支持:支持 Node.js(18+)、Deno、Bun 和所有现代浏览器
  • 零依赖:无任何第三方依赖,降低供应链安全风险
  • 丰富的函数覆盖:涵盖 Array、Object、String、Math、Function、Predicate、Promise、Map、Set 等 13 个类别

生态图

es-toolkit 生态系统
├── 核心包
│   ├── es-toolkit ──────────── 主包(现代 API)
│   ├── es-toolkit/compat ───── Lodash 兼容层
│   └── es-toolkit/fp ───────── 函数式编程入口(v1.49.0+)
├── 迁移工具
│   └── es-toolkit-codemod ──── 自动代码迁移工具(AST 转换)
├── 发布渠道
│   ├── npm ──────────────────── npm 主包
│   ├── JSR ──────────────────── Deno 原生包(@es-toolkit/es-toolkit)
│   └── CDN ──────────────────── jsdelivr / unpkg / esm.sh
├── 关键依赖
│   └── 零第三方依赖
├── 知名使用者
│   ├── Storybook ────────────── UI 组件开发工具
│   ├── Recharts ─────────────── React 图表库
│   ├── MUI ──────────────────── Material UI 组件库
│   ├── ink ──────────────────── React 终端 UI 框架
│   └── CKEditor ─────────────── 富文本编辑器
└── 社区生态
    ├── 官方文档 ─────────────── 多语言支持(含中文)
    ├── GitHub Discussions ───── 社区讨论
    └── 迁移指南 ─────────────── 从 Lodash 迁移的完整文档

适用场景

  • 新项目替代 Lodash:新项目可以直接使用 es-toolkit 作为 Lodash 的现代替代品,获得更好的性能和更小的包体积
  • 渐进式迁移 Lodash 项目:通过 es-toolkit/compat 入口,逐文件、逐函数地从 Lodash 迁移到 es-toolkit,零风险切换
  • 包体积敏感的应用:PWA、移动端 Web、嵌入式 JS 等对包体积有严格要求的场景,es-toolkit 可以减少高达 97% 的体积
  • TypeScript 项目:原生 TypeScript 支持,无需额外安装类型包,类型推导更精确
  • Node.js 服务端:支持 Node.js 18+,适合服务端工具函数需求,特别是 Serverless/Edge 场景
  • 函数式编程风格项目:v1.49.0+ 的 es-toolkit/fp 入口支持 data-last、pipe 组合风格
  • 高性能计算场景:数据处理、数值计算等对性能有较高要求的场景

开发与工程化

开发流程

es-toolkit 项目本身使用以下技术栈:

  • 语言:TypeScript(严格模式)
  • 包管理:pnpm
  • 构建工具:tsup / rollup
  • 测试框架:Vitest
  • 代码规范:prettier + eslint
  • CI/CD:GitHub Actions

在项目中集成

# 安装
pnpm add es-toolkit
 
# 如果从 Lodash 迁移,可同时安装 codemod 工具
pnpm add -D es-toolkit-codemod

迁移工具使用

# 使用 codemod 自动将 Lodash 导入替换为 es-toolkit
npx es-toolkit-codemod ./src

CI/CD 集成

es-toolkit 作为纯工具库,无需特殊的 CI/CD 配置。在构建脚本中正常引用即可:

{
  "scripts": {
    "build": "vite build",
    "test": "vitest",
    "typecheck": "tsc --noEmit"
  }
}

性能与安全

性能特点

根据官方 Benchmark(测试环境:13th Gen Intel i5-13400F, 31.82 GB RAM, Node.js v24.11.1):

函数es-toolkit (ops/s)Lodash (ops/s)性能提升
omit4,706,4151,417,2993.3x
pick10,746,5862,789,7423.9x
differenceWith18,522,0785,651,9423.3x
difference12,202,4886,828,8961.8x
intersectionWith16,926,9954,958,8663.4x
intersection11,263,8425,819,1451.9x
dropRightWhile17,841,87612,320,1661.4x

包体积对比

函数es-toolkitLodash减少
sample94 B4,817 B-98.0%
difference90 B7,958 B-98.9%
pick132 B9,520 B-98.6%
zip221 B3,961 B-94.4%
sum93 B698 B-86.7%
debounce531 B2,873 B-81.5%
throttle855 B3,111 B-72.5%

安全注意事项

  • es-toolkit 零第三方依赖,供应链攻击面极小
  • 所有函数均经过完整测试覆盖
  • es-toolkit/compat 经过 Lodash 官方测试套件验证
  • 项目使用 MIT 开源协议

已知性能注意事项

  • 少数函数(如 uniongroupBy)在特定场景下与 Lodash 性能持平或略低
  • 性能优势在 V8 引擎(Chrome、Node.js)上最为显著;其他 JS 引擎(SpiderMonkey、JavaScriptCore)的收益可能略有差异

技术对比

与 Lodash 对比

维度es-toolkitLodash
性能平均 2-3x 更快基准线
包体积减少 72%-97%完整包约 70 KB (min)
TypeScript原生内置需要 @types/lodash
Tree-shaking原生支持需要 lodash-es + 配置
函数数量200+(持续增长)300+
兼容性层es-toolkit/compatN/A
函数式编程es-toolkit/fp(v1.49.0+)lodash/fp
维护状态活跃开发2026 年恢复维护
多环境npm / JSR / CDNnpm / CDN
社区成熟度快速增长(11k+ stars)非常成熟(61k+ stars)

与 Remeda 对比

维度es-toolkitRemeda
定位Lodash 直接替代品类型安全的函数式工具库
兼容层有(/compat
参数风格data-first(默认)/ data-last(/fpdata-first + data-last 双版本
性能更优(2-3x)良好
函数覆盖更广中等

与 Radash 对比

维度es-toolkitRadash
设计哲学现代 Lodash简洁实用主义
性能优化极致(Benchmark 驱动)适度
TypeScript原生精确类型良好
生态规模更大,知名项目采用较小,社区驱动

最佳实践

1. 新项目直接使用原生 API

// ✅ 推荐:使用原生 API
import { chunk, sum, pick } from 'es-toolkit';
 
// ❌ 不推荐:新项目直接用 compat 层
import { chunk, sum, pick } from 'es-toolkit/compat';

2. 渐进式迁移 Lodash

// 阶段1:替换导入路径,行为不变
// 之前:import { chunk } from 'lodash';
import { chunk } from 'es-toolkit/compat';
 
// 阶段2:逐函数切换到原生 API
import { chunk } from 'es-toolkit';
 
// 阶段3:使用 codemod 自动迁移
// npx es-toolkit-codemod ./src

3. 函数式编程风格

import { pipe } from 'es-toolkit/fp';
import { map, filter, take } from 'es-toolkit/fp';
 
// data-last + pipe 组合
const process = pipe(
  filter((x: number) => x > 0),
  map((x: number) => x * 2),
  take(5)
);
 
process([-1, 2, 3, -4, 5, 6, 7]); // => [4, 6, 10]

4. 避免同时导入两个入口

// ❌ 避免:同时导入会增加包体积
import { chunk } from 'es-toolkit';
import { debounce } from 'es-toolkit/compat';
 
// ✅ 推荐:统一使用一个入口
import { chunk, debounce } from 'es-toolkit';

5. 利用 Tree-shaking

// ✅ 推荐:具名导入,Tree-shaking 友好
import { chunk, sum } from 'es-toolkit';
 
// ❌ 避免:默认导入整个库
import * as _ from 'es-toolkit';

技术局限与边界

已知限制

  • 函数覆盖不完整:es-toolkit 目前提供 200+ 个函数,而 Lodash 有 300+ 个。部分 Lodash 函数尚未实现(可通过 compat 层弥补部分差距)
  • 行为差异:原生 API 与 Lodash 的行为不完全一致(设计如此),例如:
    • es-toolkit 的某些函数不支持 Lodash 风格的 iteratee 简写(如字符串路径、属性匹配对象)
    • 类型检查函数可能比 Lodash 更严格
  • fp 入口较新es-toolkit/fp 在 v1.49.0(2026 年 6 月)才引入,函数覆盖仍在快速扩展中
  • 社区生态尚在建设:相比 Lodash 十余年的生态积累,es-toolkit 的第三方扩展、教程、Stack Overflow 问答较少

不适用场景

  • 需要精确复现 Lodash 行为:如果项目深度依赖 Lodash 的某些特殊行为(如 _.merge 的递归合并规则),建议使用 compat 入口或保留 Lodash
  • 极老版本环境:es-toolkit 使用现代 JS 特性,不支持 IE11 等老旧环境(Node.js 需要 18+)
  • 需要 Lodash 全部函数:如果项目使用了大量 Lodash 特有函数且 es-toolkit 尚未实现,迁移成本可能较高

迁移注意事项

  • 从 Lodash 迁移前,先检查项目中使用的所有 Lodash 函数是否在 es-toolkit 中有对应实现
  • 使用 es-toolkit/compat 进行渐进式迁移,不要一次性全量替换
  • 注意测试所有边界情况,特别是涉及 nullundefined、稀疏数组等边缘输入的行为差异

学习资源

2026 年现状

最新版本:v1.49.0(2026 年 6 月 26 日)

发展趋势

  • es-toolkit 在 2025-2026 年进入了高速增长期,npm 周下载量从百万级突破到千万级
  • 2026 年 6 月发布的 v1.49.0 新增了 es-toolkit/fp 函数式编程入口,标志着 API 设计走向成熟
  • 项目持续获得高频更新,平均每月发布多个版本,函数覆盖快速扩展
  • 被 Storybook、MUI、Recharts 等头部开源项目采用,社区信任度持续提升

社区活跃度

  • GitHub Stars:11,000+
  • 贡献者:数百人
  • Issue 响应迅速,PR 合并活跃
  • 在 Reddit、Dev.to、LinkedIn 等平台获得广泛讨论和推荐

未来路线图

  • 持续扩展函数覆盖,目标是完整覆盖 Lodash 的所有常用函数
  • es-toolkit/fp 入口将补充更多函数式编程工具
  • 继续优化性能和包体积
  • 完善迁移工具(es-toolkit-codemod),降低从 Lodash 迁移的门槛
  • 扩展多平台支持(Deno、Bun 的原生体验优化)