Rspack 提供两种方案来支持 Preact:
Rspack 使用 SWC 转译器支持 JSX/TSX。
添加 builtin:swc-loader 以支持 jsx 和 tsx:
export default {
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',
},
],
},
};关于配置项的更多信息请参考 内置 swc-loader。
完整示例可参考:examples/preact
需要开启 Preact Refresh 需要如下步骤:
@rspack/plugin-preact-refresh 插件首先需要安装相关依赖:
npm add @rspack/plugin-preact-refresh @prefresh/core @prefresh/utils -DPreact Refresh 功能的开启主要分为两部分:代码注入和代码转换:
@prefresh/core 和 @prefresh/utils 交互的代码,都已集成在 @rspack/plugin-preact-refresh 插件中,可通过该插件实现builtin:swc-loader 或 swc-loader
jsc.transform.react.refresh 以支持通用的 react 转换jsc.experimental.plugins 中添加 @swc/plugin-prefresh 以支持 preact 特有的转换babel-loader 并接入 prefresh 官方babel 插件。
在 1.0.0 以下版本, Rspack 不支持在 swc-loader 中使用 preact 特有转换。
请使用 builtin:swc-loader 并在配置中添加 rspackExperiments.preact: {} 以开启 preact 特有转换。
import PreactRefreshPlugin from '@rspack/plugin-preact-refresh';
const isDev = process.env.NODE_ENV === 'development';
export default {
// ...
mode: isDev ? 'development' : 'production',
module: {
rules: [
{
test: /\.jsx$/,
use: {
loader: 'builtin:swc-loader',
options: {
jsc: {
experimental: {
plugins: [
[
'@swc/plugin-prefresh', // 开启 preact 特有转换
{
library: ['preact-like-framework'], // 自定义的 preact 库名, 默认值为 `["preact", "preact/compat", "react"]`
},
],
],
},
parser: {
syntax: 'ecmascript',
jsx: true,
},
transform: {
react: {
development: isDev,
refresh: isDev, // 开启 react 通用转换
},
},
},
},
},
},
],
},
plugins: [
isDev && new PreactRefreshPlugin(),
isDev && new rspack.HotModuleReplacementPlugin(),
],
};完整示例可参考:examples/preact-refresh