React 插件
React 插件提供了对 React 功能的支持,插件内部集成了 React Refresh 等功能。
快速开始
安装插件
你可以通过如下的命令安装插件:
npm add @rsbuild/plugin-react -D
注册插件
你可以在 rsbuild.config.ts
文件中注册插件:
rsbuild.config.ts
import { pluginReact } from '@rsbuild/plugin-react';
export default {
plugins: [pluginReact()],
};
注册完插件后,你可以直接进行 React 开发。
组件库按需引入
React 组件库的按需引入能力来自 source.transformImport。
当项目中安装了 Ant Design 组件库 <= 4.x 版本时,Rsbuild 会自动添加按需引入能力,默认配置如下:
const defaultAntdConfig = {
libraryName: 'antd',
libraryDirectory: isServer ? 'lib' : 'es',
style: true,
};
当项目中安装了 Arco Design 组件库 时,Rsbuild 会自动添加按需引入能力,默认配置如下:
const defaultArcoConfig = [
{
libraryName: '@arco-design/web-react',
libraryDirectory: isServer ? 'lib' : 'es',
camelToDashComponentName: false,
style: true,
},
{
libraryName: '@arco-design/web-react/icon',
libraryDirectory: isServer ? 'react-icon-cjs' : 'react-icon',
camelToDashComponentName: false,
},
];
TIP
当你在 source.transformImport 中添加了 antd
或 @arco-design/web-react
相关的配置时,优先级会高于上述默认配置。
同时,可通过手动设置 transformImport: false
来关掉以上默认行为。
选项
swcReactOptions
用于配置 SWC 转换 React 代码的行为,等价于 SWC 的 jsc.transform.react 选项。
interface SwcReactOptions {
pragma?: string;
pragmaFrag?: string;
throwIfNamespace?: boolean;
development?: boolean;
useBuiltins?: boolean;
refresh?: boolean;
runtime?: 'automatic' | 'classic';
importSource?: string;
}
const isDev = process.env.NODE_ENV === 'development';
const defaultOptions = {
development: isDev,
refresh: isDev,
runtime: 'automatic',
};
swcReactOptions.runtime
设置 JSX runtime 的类型。
- 类型:
'automatic' | 'classic'
- 默认值:
'automatic'
默认情况下,Rsbuild 使用 React 17 引入的新版本 JSX runtime,即 runtime: 'automatic'
。
如果你当前的 React 版本低于 16.14.0,可以将 runtime
设置为 'classic'
:
pluginReact({
swcReactOptions: {
runtime: 'classic',
},
});
React 16.14.0 可以使用新版本 JSX runtime。
在使用 classic JSX runtime 时,你需要手动在代码中引入 React:
import React from 'react';
function App() {
return <h1>Hello World</h1>;
}
swcReactOptions.importSource
当 runtime
为 'automatic'
时,你可以通过 importSource
来指定 JSX runtime 的引入路径。
比如,在使用 Emotion 时,你可以将 importSource
设置为 '@emotion/react'
:
pluginReact({
swcReactOptions: {
importSource: '@emotion/react',
},
});
splitChunks
在 chunkSplit.strategy 设置为 split-by-experience
时,Rsbuild 默认会自动将 react
和 router
相关的包拆分为单独的 chunk:
lib-react.js
:包含 react,react-dom,以及 react 的子依赖(scheduler)。
lib-router.js
:包含 react-router,react-router-dom,以及 react-router 的子依赖(history,@remix-run/router)。
该选项用于控制这一行为,决定是否需要将 react
和 router
相关的包拆分为单独的 chunk。
type SplitReactChunkOptions = {
react?: boolean;
router?: boolean;
};
const defaultOptions = {
react: true,
router: true,
};
pluginReact({
splitChunks: {
react: false,
router: false,
},
});