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.js
const 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。