Remove 'esquery' hack to potentially enable Turbopack #8115
+8
−7
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.
The interactive playgrounds use ESLint to show lint errors, when the Rules of Hooks are broken. Inside ESLint, it loads a dependency called
esquery, but it loads the ESM version rather than the CJS version, and throws an exception as a result (it can't find theparsemethod).The current solution is to load
esquerywithrequire()and patch the object, essentially converting it to a more typical CJS export format. Unfortunately, this doesn't work with Turbopack, since modules are frozen with Object.freeze (or something similar). Turbopack is now the primary bundler for Next.js, which means this one issue is currently blocking React.dev from updating to Turbopack (and potentially seeing some pretty good DX improvements!).I ran into this issue myself, and after digging into it for a while, I think the best solution is to set up a resolve alias. The
esquerydependency comes with both CJS and ESM versions, so we can explicitly instructesqueryto resolve to the CJS version.This PR adds the necessary Webpack config. If you plan on migrating to Turbopack, the fix is similar:
Hope it helps!