Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

👑 [需求]能否用 es-toolkit 替换 lodash-es #8931

Open
faner11 opened this issue Dec 19, 2024 · 7 comments
Open

👑 [需求]能否用 es-toolkit 替换 lodash-es #8931

faner11 opened this issue Dec 19, 2024 · 7 comments

Comments

@faner11
Copy link
Contributor

faner11 commented Dec 19, 2024

提问前先看看:

https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md

🔩 所属模块或组件

全局

🥰 需求描述

在今天lodash 已经明显显得笨重了,哪怕是是lodash-es,也依然很大, 社区已经有了优秀的继任者 es-toolkit,体积比lodash 小97%,速度是lodash的两到三倍,能否用 es-toolkit替换lodash,如果可以,我可以来替换。

https://github.com/toss/es-toolkit

🚑 其他信息

我看到pro-components 使用了lodash-es 又做了转换转成lodash ,我不理解这样做的原因,可以解释一下吗

@Wxh16144
Copy link
Member

感觉 lodash 也还行呀, 如果业务项目也用了都话(对等依赖), bundle size 应该也差不多。

我看到pro-components 使用了lodash-es 又做了转换转成lodash ,我不理解这样做的原因,可以解释一下吗

blame 看了一下,好像是 esm 会用 lodash-es,cjs 还是用的 lodash,feather 构建配置可以看到有关逻辑和 PR

@faner11
Copy link
Contributor Author

faner11 commented Dec 20, 2024

感谢你关于lodash 与 lodash-es的解释, lodash-es 相对 es-toolkit 大很多,尤其是一些常用函数,lodash-es要十几kb,而 es-toolkit 则是几百个字节。

@liuzhaowei55
Copy link

lodash/lodash#5920 (comment)

参考这条讨论,似乎目前的使用方式并不会显著增加打包体积

@faner11
Copy link
Contributor Author

faner11 commented Dec 27, 2024

image

可能是sketch-color库的问题,现在构建时lodash与lodash-es都会被打包,不过这是另一个问题

我的项目里仅有pro-components使用了lodash-es,而且也仅仅是用了其中几个方法,但是这几个方法加背后依赖的方法加起来一共占了80kb左右,而如何换成es-toolkit 可能也就1kb多一点

@faner11
Copy link
Contributor Author

faner11 commented Dec 27, 2024

image

@liuzhaowei55
Copy link

https://github.com/search?q=repo:ant-design/pro-components+lodash-es/&type=code

我比较同一这里的说法,Tree Shaking 是生效的,但 lodash 相互引入依赖项目比较多,比如 isEmpty 就是一个依赖项比较多的函数,在 es-toolkit 中也是同样

@faner11
Copy link
Contributor Author

faner11 commented Dec 30, 2024

image

我使用vite 6.6 构建了pro-components 用到的所有lodash-es的方法,构建大小差了5倍左右,ems小了25kb,而且改了之后还会有更健壮的ts 类型提示,还是建议改的。

export { isEmpty,toNumber,merge,omit,pick,isEqual } from "lodash-es";
export { isEmpty, toNumber } from "es-toolkit/compat";
export { merge, omit, pick, isEqual } from 'es-toolkit'
import { defineConfig } from 'vite'
export default defineConfig({
  build: {
    minify: "esbuild",
    lib: {
      entry: ["./es-toolkit.ts", "./lodash.ts"],
    }
  }
})

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants