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。