Improve tree shaking for esbuild/webpack #4569
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #4433
I landed some changes that improve the Next.js treeshaking story. I'm pretty astonished at how far Webpack/Next.js is lagging behind Rollup here. Lots of idiosyncrasies.
As always with tree-shaking issues the first thing you should try is a wildcard export:
This is still necessary with both Webpack (at least Next.js) and esbuild. That's pretty disappointing.
Notes on the fixes:
@__PURE__
.z.stringbool
APIs were bound versions of the Zod Core_stringbool
factory, which apparently wasn't shaking. This pulled in the implementations of$ZodUnknown
,$ZodBoolean
, and$ZodPipe
.$ZodFunction
class has methods that return instances of itself threw Webpack for a loop. Dodged this withnew inst.constructor()
.