Skip to content

chore: replace lodash with es-toolkit #6502

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

Merged
merged 3 commits into from
Jul 26, 2025
Merged

Conversation

wojtekmaj
Copy link
Contributor

What's the problem this PR addresses?

es-toolkit is a modern lodash alternative that claims to be much faster and lighter, potentially improving Yarn overall performance: https://es-toolkit.slash.page/intro.html

How did you fix it?

The lazy way, frankly: using es-toolkit/compat to provide practically drop-in lodash replacement with minimal effort.

Checklist

  • I have set the packages that need to be released for my changes to be effective.
  • I will check that all automated PR checks pass before the PR gets reviewed.

@merceyz
Copy link
Member

merceyz commented Sep 13, 2024

Some of our dependencies are using lodash so this would increase the install size and maybe the bundle size.

@wojtekmaj wojtekmaj force-pushed the es-toolkit branch 2 times, most recently from 1d28dc6 to 461da26 Compare September 13, 2024 23:05
@wojtekmaj wojtekmaj marked this pull request as draft September 13, 2024 23:05
@wojtekmaj wojtekmaj force-pushed the es-toolkit branch 3 times, most recently from f012bde to d6e415c Compare September 14, 2024 19:49
@wojtekmaj
Copy link
Contributor Author

Valid point, but it seems like not too many dependencies are in fact using lodash. It should be relatively easy to clean this whole tree up. In the meantime, this draft PR is in itself ready to go I believe. :)

@wojtekmaj wojtekmaj marked this pull request as ready for review September 14, 2024 20:57
@wojtekmaj
Copy link
Contributor Author

wojtekmaj commented Sep 14, 2024

Well, this PR DOES make Yarn smaller by a bit:

Before: 2.63 MiB
https://github.com/yarnpkg/berry/actions/runs/12011432883/job/33480410817#step:5:27

After: 2.61 MiB
image

I believe that's because while other dependencies like ink (not anymore) are indeed using lodash, they, just like Yarn, are importing modules selectively from it, leading to better tree shaking than one could initially assume.

1% improvement is not much but it certainly adds up 🤷

I also see a potential of shaving off further 2 KB, but I'd rather do it in small stages.

@merceyz
Copy link
Member

merceyz commented Sep 14, 2024

while other dependencies like ink are indeed using lodash, they, just like Yarn, are importing modules selectively from it

Because I patched it to do that, in the future we could change that patch to use es-toolkit instead.
https://github.com/yarnpkg/berry/blob/fb6d2d696f36040bb082ddd20adffab67eaa59dc/.yarn/patches/ink-npm-3.0.8-3a8005f59f.patch

Copy link
Member

@merceyz merceyz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add an entry for lodash and @types/lodash here:

forbidDependency(ctx, `inquirer`, `Don't depend on inquirer - we use enquirer instead`);

@wojtekmaj
Copy link
Contributor Author

wojtekmaj commented Sep 14, 2024

I couldn't forbid @types/lodash because it appears to be deeply rooted inside pkg-tests-specs, but lodash alone was fine :)

@wojtekmaj
Copy link
Contributor Author

Update: the latest version of ink, our dependency, also switched from lodash to es-toolkit, making this PR more welcome than before, IMO. I'll work in getting my work rebased.

@dayongkr
Copy link

I think @wojtekmaj had addressed all the review comments—any reason the review isn’t proceeding?

Also, since some time has passed, I think it would be good to update the es-toolkit version.

@RDIL
Copy link
Member

RDIL commented Jul 14, 2025

I can re-review if you can fix the conflicts first!

@wojtekmaj
Copy link
Contributor Author

@RDIL Done! :)

BTW, this PR still does its job, still decreases binary size.

Before: 2.86 MiB
https://github.com/yarnpkg/berry/actions/runs/15427018142/job/43416399142#step:5:27

After: 2.84 MiB

➤ YN0000: ✓ Done building the CLI!
➤ YN0000: ? Bundle path: /workspaces/berry/packages/yarnpkg-cli/bundles/yarn.js
➤ YN0000: ? Bundle size: 2.84 MiB
➤ YN0000: ? Bundle version: 4.9.2-git.20241202.hash-693272998

wojtekmaj and others added 3 commits July 15, 2025 07:46
es-toolkit is a modern lodash alternative that claims to be much faster and lighter, potentially improving Yarn overall performance: https://es-toolkit.slash.page/intro.html
Co-authored-by: Kristoffer K. <merceyz@users.noreply.github.com>
Copy link
Member

@RDIL RDIL left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@spanishpear
Copy link
Contributor

@RDIL thank you!! Are we waiting on one more review to merge this? Not sure if it's a stale request or not ❤️

@arcanis arcanis merged commit 6f8114f into yarnpkg:master Jul 26, 2025
26 checks passed
Saadnajmi pushed a commit to Saadnajmi/berry that referenced this pull request Jul 26, 2025
## What's the problem this PR addresses?

es-toolkit is a modern lodash alternative that claims to be much faster
and lighter, potentially improving Yarn overall performance:
https://es-toolkit.slash.page/intro.html

## How did you fix it?

The lazy way, frankly: using es-toolkit/compat to provide practically
drop-in lodash replacement with minimal effort.

## Checklist

<!--- Don't worry if you miss something, chores are automatically
tested. -->
<!--- This checklist exists to help you remember doing the chores when
you submit a PR. -->
<!--- Put an `x` in all the boxes that apply. -->
- [x] I have read the [Contributing
Guide](https://yarnpkg.com/advanced/contributing).

<!-- See
https://yarnpkg.com/advanced/contributing#preparing-your-pr-to-be-released
for more details. -->
<!-- Check with `yarn version check` and fix with `yarn version check
-i` -->
- [x] I have set the packages that need to be released for my changes to
be effective.

<!-- The "Testing chores" workflow validates that your PR follows our
guidelines. -->
<!-- If it doesn't pass, click on it to see details as to what your PR
might be missing. -->
- [x] I will check that all automated PR checks pass before the PR gets
reviewed.

---------

Co-authored-by: Kristoffer K. <merceyz@users.noreply.github.com>
@wojtekmaj wojtekmaj deleted the es-toolkit branch July 27, 2025 20:00
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

Successfully merging this pull request may close these issues.

6 participants