Rspack 提供两种方案来支持 React:
Rspack 使用 SWC 转译器支持 JSX/TSX。
添加 builtin:swc-loader 以支持 jsx 和 tsx:
关于配置项的更多信息请参考 内置 swc-loader。
目前 Rspack 中有两种开启 React Fast Refresh 的方式:
早期 Rspack 为了部分项目的开箱即用,在 @rspack/dev-server 和 @rspack/core 中内置了 React Fast Refresh 功能,这意味着如果你使用了 @rspack/cli 或 @rspack/dev-server,在 dev 模式下会默认开启 React Fast Refresh 功能,你可以直接在项目中使用。这提升了 React 项目使用 Rspack 时的易用性,但也导致了很多其他问题。
这样做导致 Rspack 并不是真正意义上的框架无关,如果你在使用 Vue 等其他框架时,就需要手动通过 builtins.react.refresh 来禁用 React Fast Refresh 功能,以防止为一些 Vue 模块注入 React Fast Refresh 相关的代码。
我们意识到这一问题,希望通过 experiments.rspackFuture.disableTransformByDefault 和 @rspack/plugin-react-refresh 来帮助用户逐渐地迁移到更为正确的方式上来,即第二种方式。
@rspack/plugin-react-refresh 依赖于 experiments.rspackFuture.disableTransformByDefault
首先需要安装相关依赖:
React Fast Refresh 功能的开启主要分为两部分:代码注入和代码转换
react-refresh 包中的一些代码,以及一些自定义的运行时代码,都已集成在 @rspack/plugin-react-refresh 插件中,可通过该插件注入swc-loader 的 jsc.transform.react.refresh 或 babel-loader 的 react-refresh/babel 插件。相较于上一种方式,该方式将 React Fast Refresh 代码注入逻辑和转换逻辑解耦,代码注入逻辑统一通过 @rspack/plugin-react-refresh 插件完成,代码转换通过 loader 完成。这意味着该插件可以配合 builtin:swc-loader、swc-loader 或 babel-loader 使用:
builtin:swc-loader 使用方式可参考:examples/react-refresh,使用 swc-loader 只需将 builtin:swc-loader 换为 swc-loader 即可。babel-loader 的使用方式可参考:examples/react-refresh-babel-loaderReact Compiler 是 React 19 引入的一个实验性编译器,它可以自动优化你的 React 代码。
在开始使用 React Compiler 之前,建议阅读 React Compiler 文档,以了解 React Compiler 的功能、当前状态和使用方法。
React Compiler 目前仅支持 Babel 编译,这会导致构建时间变慢。
在 Rspack 中使用 React Compiler 的步骤如下:
react 和 react-dom 版本到 19。babel-loader:babel.config.js 并配置插件:你可以参考以下示例项目:
SVGR 是一个用于将 SVG 转换为 React 组件的工具,
在 Rspack 中使用 SVGR 的方式与 webpack 中完全一致:
对于 SVGR 的详细用法,请参考 SVGR 文档 - Webpack。