"Lodash" 的终极版!Vue、React 通杀!

还记得第一次用 Lodash 的惊艳吗?

一行 _.debounce 搞定疯狂触发的搜索框,一个 _.cloneDeep 拯救被引用折磨的 Vuex 状态。

前端工具库的王者------Lodash

提到 Lodash ,几乎每一位前端开发者都能立刻想起它那句经典的广告语:"Make JavaScript easier"

在过去十年里,Lodash 几乎成了项目脚手架的默认选项:深拷贝用 cloneDeep,数组去重用 uniq,对象合并用 merge......它就像一把瑞士军刀,把 ES5 时代那些冗长、易错的工具函数封装得井井有条。

然而,ES6 及后续标准的全面普及 ,让 Lodash 的光芒逐渐暗淡。

  • Array.fromObject.assign、可选链 ?.、空值合并 ?? 等原生语法糖,覆盖了 Lodash 80% 的日常用例。
  • Tree-ShakingBundle 分析工具的兴起,让"按需引入"不再是 Lodash 的专利;相反,Lodash 的 ES5 底层实现庞大的 CommonJS 封装 反而成为打包体积的累赘。

一句话:我们能用一行原生语法搞定的功能,已经不想再为 Lodash 多付出哪怕 1 KB 的代价

Lodash 的痛点 ------ ES5 时代的"老包袱"

  • 诞生于 ES5,语法老旧

    大量 arguments 对象、for 循环、函数嵌套,与现代箭头函数、解构格格不入,读源码像在"考古"。

  • Tree-Shaking 不友好

    内部交叉引用成"蜘蛛网",只引一个 debounce 也打包 20+ 辅助函数。

  • 巨型单包发布

    CommonJS 默认导出整个命名空间,体积只增不减;想用 ESM 还得额外装 lodash-es

  • 原生能力已覆盖

    ES2020+ 已有 structuredCloneObject.fromEntriesArray.flatMap 等,Lodash 仍保留历史兼容分支。

  • 配置繁琐
    babel-plugin-lodashlodash-webpack-plugin 一出错就"一夜回到解放前"。

  • 类型支持滞后
    @types/lodash 与源码不同步,版本差异导致类型报错。

Radash & Radashi:下一代工具库双子星

当社区开始寻找 Lodash 的替代品时,Radash 横空出世:

  • 100% TypeScript 编写,类型提示一步到位;
  • 函数粒度的 ES Module 导出,天然支持 Tree-Shaking;
  • 源码简洁、单测覆盖率高,社区反响热烈。

但好景不长,2023 年 9 月后,Radash 作者因精力原因 停止维护

于是,社区核心贡献者迅速分叉(fork),诞生了 Radashi ------ 一个"继承 + 超越"的活跃分支:

  • 持续维护:每天都有 PR 合并,凌晨 5 点自动发 beta 包;
  • 设计 ethos 公开透明,新增函数需符合社区 RFC;
  • 性能门禁:每个 PR 自动跑 benchmark,拒绝负优化;
  • 体积守护:新增函数若 >1 KB 即触发 review;
  • 一键迁移npm i radashi@^12,全局替换 from 'radash'from 'radashi',0 成本切换。

Radash vs Radashi:差异速览

维度 Radash(已停更) Radashi(活跃)
维护状态 2023-09 后无人响应 Issue 每日合并 PR, nightly beta
新增函数 停滞 社区票选 + RFC 流程
性能/体积监控 PR 自动跑 benchmark & size-diff
发布机制 人工发版,间隔长 nightly beta、PR 预览包
文档 英文为主 多语言自动生成 + 持续更新
贡献门槛 单人维护 公开招募 Core Team

Vue 3 极速上手(3 个片段,复制即跑)

下面所有示例基于 Vite + Vue 3 + <script setup> 语法糖TypeScript 开箱即用。

数组对象去重(unique

html 复制代码
<script setup lang="ts">
import { unique } from 'radashi'

const users = ref([
  { id: 1, name: 'Ada' },
  { id: 2, name: 'Bob' },
  { id: 1, name: 'Ada' } // 重复
])

const uniqueUsers = computed(() => unique(users.value, u => u.id))
</script>

<template>
  <ul>
    <li v-for="u in uniqueUsers" :key="u.id">{{ u.name }}</li>
  </ul>
</template>

防抖搜索(debounce

html 复制代码
<script setup lang="ts">
import { debounce } from 'radashi'
import { ref } from 'vue'

const keyword = ref('')

// 300 ms 防抖,自动推导类型
const onInput = debounce((e: Event) => {
  keyword.value = (e.target as HTMLInputElement).value
  // TODO: 触发搜索 API
}, 300)
</script>

<template>
  <input placeholder="Search..." @input="onInput" />
  <p>当前关键词:{{ keyword }}</p>
</template>

深拷贝 + 安全取值(cloneDeep & get

html 复制代码
<script setup lang="ts">
import { cloneDeep, get } from 'radashi'
import { reactive } from 'vue'

const source = reactive({ a: { b: [10, 20, 30] } })
const copy = cloneDeep(source)

// 安全读取深层路径,不存在返回默认值 0
const value = computed(() => get(copy, 'a.b.2', 0)) // 30
</script>

<template>
  <p>深拷贝后读取:{{ value }}</p>
</template>

安装与 Tree-Shaking 提示

bash 复制代码
# 推荐 pnpm
pnpm add radashi@^12

确保 vite.config.ts 开启 ESBuild 压缩即可自动摇树:

ts 复制代码
export default defineConfig({
  plugins: [vue()],
  esbuild: { drop: ['console', 'debugger'] }
})

30 秒迁移指北(旧项目升级)

bash 复制代码
# 1. 卸载旧库
npm remove radash lodash

# 2. 安装新库
npm i radashi@^12

# 3. 全局替换(VS Code)
# 查找:from 'radash'
# 替换:from 'radashi'

# 4. 构建/测试
npm run build && npm test

无报错即完成;若出现类型提示差异,对照官方 Lodash Parity 页面: https://radashi.js.org/lodash-parity 秒修。

写在最后

Lodash"大而全"Radashi"小而精" ,前端工具库完成了从 "功能覆盖""体验优先" 的范式转移。

如果你正在用 Vue 3 启动一个新项目,或者想给旧项目做一次无痛减脂,Radashi 就是那个值得立刻接手的接力棒。

import _ from 'lodash' 留在过去,

import { debounce } from 'radashi' 写进未来。

  • radash 官方文档https://radash.uihtm.com/
  • radashi 官方文档https://radashi.js.org/
相关推荐
崔庆才丨静觅7 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60618 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了8 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅8 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅8 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅9 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment9 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅9 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊9 小时前
jwt介绍
前端
爱敲代码的小鱼9 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax