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

  1. module.exports = {
  2. module: {
  3. rules: [
  4. {
  5. test: /\.jsx$/,
  6. use: {
  7. loader: 'builtin:swc-loader',
  8. options: {
  9. jsc: {
  10. parser: {
  11. syntax: 'ecmascript',
  12. jsx: true,
  13. },
  14. },
  15. },
  16. },
  17. type: 'javascript/auto',
  18. },
  19. {
  20. test: /\.tsx$/,
  21. use: {
  22. loader: 'builtin:swc-loader',
  23. options: {
  24. jsc: {
  25. parser: {
  26. syntax: 'typescript',
  27. tsx: true,
  28. },
  29. },
  30. },
  31. },
  32. type: 'javascript/auto',
  33. },
  34. ],
  35. },
  36. };

关于配置项的更多信息请参考 builtin:swc-loader

Fast Refresh

通过 @rspack/plugin-react-refresh 支持 React Fast Refresh 功能,首先需要安装相关依赖:

npm

yarn

pnpm

bun

  1. npm add @rspack/plugin-react-refresh react-refresh -D

React Fast Refresh 功能的开启主要分为两部分:代码注入和代码转换

rspack.config.js

  1. const ReactRefreshPlugin = require('@rspack/plugin-react-refresh');
  2. const isDev = process.env.NODE_ENV === 'development';
  3. module.exports = {
  4. // ...
  5. mode: isDev ? 'development' : 'production',
  6. module: {
  7. rules: [
  8. {
  9. test: /\.jsx$/,
  10. use: {
  11. loader: 'builtin:swc-loader',
  12. options: {
  13. jsc: {
  14. parser: {
  15. syntax: 'ecmascript',
  16. jsx: true,
  17. },
  18. transform: {
  19. react: {
  20. development: isDev,
  21. refresh: isDev,
  22. },
  23. },
  24. },
  25. },
  26. },
  27. },
  28. ],
  29. },
  30. plugins: [isDev && new ReactRefreshPlugin()].filter(Boolean),
  31. };

这种实现方式将代码注入逻辑和转换逻辑解耦,代码注入逻辑统一通过 @rspack/plugin-react-refresh 插件完成,代码转换通过 loader 完成。这意味着该插件可以配合 builtin:swc-loaderswc-loaderbabel-loader 使用:

React Compiler

React Compiler 是 React 19 引入的一个实验性编译器,它可以自动优化你的 React 代码。

在开始使用 React Compiler 之前,建议阅读 React Compiler 文档,以了解 React Compiler 的功能、当前状态和使用方法。

TIP

React Compiler 目前仅支持 Babel 编译,这会导致构建时间变慢。

如何使用

在 Rspack 中使用 React Compiler 的步骤如下:

  1. 升级 reactreact-dom 版本到 19。
  2. 目前 React Compiler 仅提供了 Babel 插件,你需要安装:
  1. 在你的 Rspack 配置文件中注册 babel-loader

rspack.config.js

  1. module.exports = {
  2. module: {
  3. rules: [
  4. {
  5. test: /\.js$/,
  6. use: [
  7. {
  8. loader: 'builtin:swc-loader',
  9. options: {
  10. // SWC options for JS
  11. },
  12. },
  13. ],
  14. },
  15. {
  16. test: /\.jsx$/,
  17. use: [
  18. {
  19. loader: 'builtin:swc-loader',
  20. options: {
  21. // SWC options for JSX
  22. },
  23. },
  24. { loader: 'babel-loader' },
  25. ],
  26. },
  27. ],
  28. },
  29. };
  1. 创建 babel.config.js 并配置插件:

babel.config.js

  1. // babel.config.js
  2. const ReactCompilerConfig = {
  3. /* ... */
  4. };
  5. module.exports = function () {
  6. return {
  7. plugins: [
  8. ['babel-plugin-react-compiler', ReactCompilerConfig], // must run first!
  9. '@babel/plugin-syntax-jsx',
  10. ],
  11. };
  12. };

示例

你可以参考以下示例项目:

集成 SVGR

SVGR 是一个用于将 SVG 转换为 React 组件的工具,

在 Rspack 中使用 SVGR 的方式与 webpack 中完全一致:

rspack.config.js

  1. module.exports = {
  2. module: {
  3. rules: [
  4. {
  5. test: /\.svg$/i,
  6. issuer: /\.[jt]sx?$/,
  7. use: ['@svgr/webpack'],
  8. },
  9. ],
  10. },
  11. };

对于 SVGR 的详细用法,请参考 SVGR 文档 - webpack