React
如何使用
Rspack 提供两种方案来支持 React:
- 使用 Rsbuild:Rsbuild 提供对 React 开箱即用的支持,能够快速创建一个 React 项目,详见 Rsbuild - React。
- 手动配置 Rspack:你可以参考当前文档,手动添加 React 相关的配置。
配置 JSX/TSX
Rspack 使用 SWC 转译器支持 JSX 和 TSX。
你可以添加 builtin:swc-loader 以支持 .jsx 和 .tsx 文件:
rspack.config.js
module.exports = {module: {rules: [{test: /\.jsx$/,use: {loader: 'builtin:swc-loader',options: {jsc: {parser: {syntax: 'ecmascript',jsx: true,},},},},type: 'javascript/auto',},{test: /\.tsx$/,use: {loader: 'builtin:swc-loader',options: {jsc: {parser: {syntax: 'typescript',tsx: true,},},},},type: 'javascript/auto',},],},};
关于配置项的更多信息请参考 builtin:swc-loader。
Fast Refresh
通过 @rspack/plugin-react-refresh 支持 React Fast Refresh 功能,首先需要安装相关依赖:
npm
yarn
pnpm
bun
npm add @rspack/plugin-react-refresh react-refresh -D
React Fast Refresh 功能的开启主要分为两部分:代码注入和代码转换
- 代码注入会注入
react-refresh包中的一些代码,以及一些自定义的运行时代码,都已集成在 @rspack/plugin-react-refresh 插件中,可通过该插件注入。 - 代码转换可通过 loader 来完成,比如
swc-loader的 jsc.transform.react.refresh 或babel-loader的 react-refresh/babel 插件。
rspack.config.js
const ReactRefreshPlugin = require('@rspack/plugin-react-refresh');const isDev = process.env.NODE_ENV === 'development';module.exports = {// ...mode: isDev ? 'development' : 'production',module: {rules: [{test: /\.jsx$/,use: {loader: 'builtin:swc-loader',options: {jsc: {parser: {syntax: 'ecmascript',jsx: true,},transform: {react: {development: isDev,refresh: isDev,},},},},},},],},plugins: [isDev && new ReactRefreshPlugin()].filter(Boolean),};
这种实现方式将代码注入逻辑和转换逻辑解耦,代码注入逻辑统一通过 @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-loader
React Compiler
React Compiler 是 React 19 引入的一个实验性编译器,它可以自动优化你的 React 代码。
在开始使用 React Compiler 之前,建议阅读 React Compiler 文档,以了解 React Compiler 的功能、当前状态和使用方法。
TIP
React Compiler 目前仅支持 Babel 编译,这会导致构建时间变慢。
如何使用
在 Rspack 中使用 React Compiler 的步骤如下:
- 升级
react和react-dom版本到 19。 - 目前 React Compiler 仅提供了 Babel 插件,你需要安装:
- 在你的 Rspack 配置文件中注册
babel-loader:
rspack.config.js
module.exports = {module: {rules: [{test: /\.js$/,use: [{loader: 'builtin:swc-loader',options: {// SWC options for JS},},],},{test: /\.jsx$/,use: [{loader: 'builtin:swc-loader',options: {// SWC options for JSX},},{ loader: 'babel-loader' },],},],},};
- 创建
babel.config.js并配置插件:
babel.config.js
// babel.config.jsconst ReactCompilerConfig = {/* ... */};module.exports = function () {return {plugins: [['babel-plugin-react-compiler', ReactCompilerConfig], // must run first!'@babel/plugin-syntax-jsx',],};};
示例
你可以参考以下示例项目:
集成 SVGR
SVGR 是一个用于将 SVG 转换为 React 组件的工具,
在 Rspack 中使用 SVGR 的方式与 webpack 中完全一致:
rspack.config.js
module.exports = {module: {rules: [{test: /\.svg$/i,issuer: /\.[jt]sx?$/,use: ['@svgr/webpack'],},],},};
对于 SVGR 的详细用法,请参考 SVGR 文档 - webpack。
