
es-toolkit 入门指南现代高性能 JavaScript 工具库的核心能力与实战用法【免费下载链接】es-toolkitA modern JavaScript utility library thats 2-3 times faster and up to 97% smaller, a major upgrade to lodash.项目地址: https://gitcode.com/GitHub_Trending/es/es-toolkites-toolkit 是一款面向日常开发的现代化 JavaScript 工具库通过充分运用最新的 JavaScript API 实现在 bundle 体积最大缩小 97% 与 运行时性能23 倍提升 两方面相较 lodash 等传统工具库都有显著优势同时内置完善的 TypeScript 类型并追求 100% 测试覆盖率。本文以 docs/ja/intro.mdes-toolkit 的日语介绍文档为骨架结合仓库源码与安装文档 docs/ja/usage.md系统讲解其设计理念、功能分类、安装方式与核心 API 的源码级实现帮助你快速上手并正确选用。为什么选择 es-toolkit体积与性能的取舍逻辑es-toolkit 的定位可以概括为三个关键词现代实现、极致体积、高性能。现代实现库中大量函数直接基于Set、AbortSignal、Map等较新的 JavaScript 语言能力实现而非像 lodash 那样兼容上古运行时的复杂回退逻辑。以去重函数为例es-toolkit 的 uniq 核心代码仅一行return [...new Set(arr)]。体积优势同一函数基准下es-toolkit 相比 lodash 的 bundle 体积最大可缩小97%部分工具函数体积甚至不足 100 字节。这得益于零依赖、充分的 tree-shaking 支持package.json中声明了sideEffects: falsepackage.json以及按模块拆分导出。性能优势平均 2 倍、部分函数最高 11 倍的运行时性能提升具体对比数据与测量方法可参考 docs/ja/performance.md 和 docs/ja/bundle-size.md。其中体积指标的测量方式如下使用 esbuild 0.28.0 对如下代码进行打包完整基准代码位于 benchmarks/bundle-sizeimport { chunk } from es-toolkit; // 或者 import { chunk } from lodash-es; console.log(chunk);提供的功能分类es-toolkit 按使用场景将函数划分为以下分类各分类均有独立的子路径导出见 package.json分类用途代表函数参考文档Array数组操作uniq、differencesrc/arrayFunction控制函数执行debounce、throttlesrc/functionMath数值运算sum、roundsrc/mathObject对象操作pick、omitsrc/objectPredicate类型守卫isNotNilsrc/predicatePromise异步操作delaysrc/promiseString字符串操作snakeCasesrc/string除上述分类外仓库中还包含bigint、map、set、iterator、error、server、types、util等模块src/index.ts 的导出声明全部模块均可通过es-toolkit/模块名的方式按需导入。安装与使用Node.jsnpm / pnpm / yarnes-toolkit 支持 Node.js 18 及以上版本使用你习惯的包管理器即可安装npm install es-toolkitpnpm add es-toolkityarn add es-toolkit安装后直接按命名导入使用import { sum } from es-toolkit; sum([1, 2, 3]);Deno通过 JSRDeno 环境通过 JSR 安装由于 JSR 的命名空间限制导入路径需要额外的es-toolkit作用域deno add jsr:es-toolkit/es-toolkitimport { sum } from es-toolkit/es-toolkit; sum([1, 2, 3]);Bunbun add es-toolkit浏览器CDN与 lodash 类似es-toolkit 的全局构建会将所有函数挂载到_变量上package.json中jsdelivr/unpkg字段指向 dist/browser.global.js!-- jsdelivr -- script srchttps://cdn.jsdelivr.net/npm/es-toolkit%5E1/script script var arr _.chunk([1, 2, 3, 4, 5, 6], 3); /script!-- unpkg -- script srchttps://unpkg.com/es-toolkit%5E1/script script var arr _.chunk([1, 2, 3, 4, 5, 6], 3); /script现代浏览器还可以配合 import map 使用 ESM 版本script typeimportmap { imports: { es-toolkit: https://esm.sh/es-toolkit%5E1 } } /script script typemodule import { chunk } from es-toolkit; chunk([1, 2, 3, 4, 5, 6], 3); /script核心 API 源码解析Array基于 Set 的现代实现uniq 使用Set天然的去重语义一行代码即完成去重并保持首次出现顺序export function uniqT(arr: readonly T[]): T[] { return [...new Set(arr)]; }difference 先将第二个数组转成Set再做过滤将判断复杂度从 O(n×m) 降为 O(nm)export function differenceT(firstArr: readonly T[], secondArr: readonly T[]): T[] { const secondSet new Set(secondArr); return firstArr.filter(item !secondSet.has(item)); }这种“Set 化 线性过滤”的模式在仓库中广泛复用如 intersection、union 等是体积小、性能高的关键原因之一。Function带 AbortSignal 的 debouncedebounce 除了标准的延迟执行语义外还提供了三个值得关注的特性返回的函数带有cancel()、flush()、schedule()三个方法分别用于取消待执行调用、立即执行挂起调用、重新调度定时器支持edges选项可指定在延迟窗口的leading开头、trailing结尾或两者都触发执行默认值为[trailing]支持signalAbortSignal选项当信号中止时自动取消挂起的调用内部通过signal.addEventListener(abort, cancel, { once: true })注册监听便于与 AbortController 集成做取消控制。典型用法const debouncedFunction debounce(() { console.log(Function executed); }, 1000); debouncedFunction(); // 1 秒内无再次调用则执行 debouncedFunction.cancel(); // 取消待执行调用 // 结合 AbortSignal const controller new AbortController(); const debouncedWithSignal debounce( () console.log(Function executed), 1000, { signal: controller.signal } ); debouncedWithSignal(); controller.abort(); // 取消该次 debouncePromise可取消的 delaydelay 返回一个在指定毫秒后 resolve 的 Promise可在 async/await 中直接使用传入signal后中止信号会以AbortError拒绝该 Promiseimport { delay } from es-toolkit; async function foo() { console.log(Start); await delay(1000); // 延迟 1 秒 console.log(End); } const controller new AbortController(); const { signal } controller; setTimeout(() controller.abort(), 50); try { await delay(100, { signal }); } catch (error) { console.error(error); // AbortError }Predicate类型守卫 isNotNilisNotNil 是带 TypeScript 类型谓词签名x is T的函数可直接用于filter等场景让编译器自动收窄类型// arr 的类型是 (number | undefined)[] const arr [1, undefined, 3]; // result 的类型被收窄为 number[] const result arr.filter(isNotNil); // result 为 [1, 3]StringsnakeCasesnakeCase 先借助内部words函数将字符串切分为单词序列再统一转小写并用下划线连接snakeCase(camelCase); // camel_case snakeCase(some whitespace); // some_whitespace snakeCase(hyphen-text); // hyphen_text snakeCase(HTTPRequest); // http_request类型安全与可靠性保障内置 TypeScript 类型所有函数均附带完整泛型签名与类型谓词开发者无需额外安装types包且 jsr.json 等发布配置同时面向 npm 与 JSR 双生态100% 测试覆盖率每个函数都配有同名.spec.ts测试文件如 src/array/uniq.spec.ts、src/function/debounce.spec.ts仓库通过 Vitest 运行测试yarn test见 package.json并以 100% 覆盖率为目标保障可靠性。进一步学习各分类的完整函数参考见 docs/ja/reference另有英语 docs/reference、简体中文 docs/zh_hans/reference 等多语言版本体积与性能的量化对比docs/ja/bundle-size.md、docs/ja/performance.mdlodash 兼容层compat与函数式编程fp模块docs/ja/compat/intro.md、docs/ja/fp/intro.md。结语es-toolkit 以现代 JavaScript 能力为基石在保持 API 简洁易用的同时实现了体积与性能的双重突破并以完善的类型系统与测试覆盖保证了生产可用的可靠性。无论是替换既有项目中的 lodash 依赖还是在 Node.js、Deno、Bun 或浏览器中从零构建应用它都值得作为首选的工具库纳入技术选型。若需在本地查看源码与运行测试可在仓库根目录执行yarn install后通过yarn test运行测试、yarn bench运行基准测试见 package.json。【免费下载链接】es-toolkitA modern JavaScript utility library thats 2-3 times faster and up to 97% smaller, a major upgrade to lodash.项目地址: https://gitcode.com/GitHub_Trending/es/es-toolkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考