next.js
9d596b15 - Turbopack: Fix babel-loader (allowing built-in or manual configuration) (#82676)

Commit
214 days ago
Turbopack: Fix babel-loader (allowing built-in or manual configuration) (#82676) ## Context: What's broken? For using `styled-jsx` with `react-compiler`, we need to use `babel-loader`, but it turns out that outside of our current narrow use of `react-compiler`, our usage of `babel-loader` in Turbopack is totally broken: * Babel configs cause us to exit with an error claiming it's not supported. * We have code in Turbopack for enabling `babel-loader`, but we try to use the version from NPM instead of the one bundled internally with Next.js. We should use the one bundled internally with Next.js. * We shouldn't run all the babel transforms in the `next/babel` preset because they're redundant with SWC. `react-compiler` added a "standalone" mode to the babel-loader that's close to what we want, but I need to extend it for Turbopack's use-case. ## This PR - Remove the warnings/errors that say babel isn't supported with Turbopack. - Automatically enable babel when a config file is present. - Modify the `next/babel` preset in Turbopack (I'm re-using/extending `'standalone'` mode) to enable syntax plugins, but disable any transformations or down-leveling (we expect SWC to do this). This is a bit hacky because babel's presets aren't designed to support this configuration. - Pre-bundle `plugin-syntax-typescript`. This is a stub package that's also used by the typescript preset, so this really just exposes an extra entrypoint into the babel bundle. - Migrate one of the legacy babel `test/integration` tests (that uses flow syntax) to `test/e2e`. The turbopack `foreign` condition doesn't work correctly without test isolation. - Enable Turbopack for all the babel-related integration and e2e tests I could find. ## Follow-ups - [ ] https://github.com/vercel/next.js/pull/83502 React compiler can cause babel to run *twice*. Merge the logic for automatic configuration of `react-compiler` (currently in JS) and `babel` (in Rust), so that this can't happen. - [ ] https://github.com/vercel/next.js/pull/84002 Update the docs to show that Babel is now supported.
Author
bgw bgw
Parents
Loading