close

配置

Storybook Rsbuild 提供了多种自定义构建流程和行为的方式。本指南介绍可在 .storybook/main.ts 中使用的配置项。

Storybook 文档

本指南聚焦于 Rsbuild 特有的配置。关于通用的 Storybook 配置(stories、addons、refs 等),请参阅 Storybook Configure 文档。

rsbuildFinal

rsbuildFinal 字段让你能够直接访问 Rsbuild 配置。你可以用它来自定义构建配置,类似于 Webpack builder 中的 webpackFinal

该函数接收当前的 Rsbuild 配置和一个 options 对象,并应返回修改后的配置。

使用

mergeRsbuildConfig 进行修改 始终使用来自 @rsbuild/coremergeRsbuildConfig 来修改配置。直接修改诸如 config.tools.rspack = {...} 之类的属性可能不会生效,因为内部配置可能是函数/对象组成的数组,直接赋值可能会被静默忽略。

.storybook/main.ts
import type { 
import StorybookConfig
StorybookConfig
} from 'storybook-react-rsbuild';
import {
import mergeRsbuildConfig
mergeRsbuildConfig
} from '@rsbuild/core';
const
const config: StorybookConfig
config
:
import StorybookConfig
StorybookConfig
= {
framework: string
framework
: 'storybook-react-rsbuild',
stories: string[]
stories
: ['../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
addons: never[]
addons
: [],
async
function rsbuildFinal(config: any, { configType }: {
    configType: any;
}): Promise<any>
rsbuildFinal
(
config: any
config
, {
configType: any
configType
}) {
// Customize Rsbuild config here if (
configType: any
configType
=== 'PRODUCTION') {
return
import mergeRsbuildConfig
mergeRsbuildConfig
(
config: any
config
, {
performance: {
    removeConsole: boolean;
}
performance
: {
removeConsole: boolean
removeConsole
: true,
}, }); } // Example: add resolve alias return
import mergeRsbuildConfig
mergeRsbuildConfig
(
config: any
config
, {
resolve: {
    alias: {
        '@components': string;
    };
}
resolve
: {
alias: {
    '@components': string;
}
alias
: {
'@components': './src/components', }, }, }); }, }; export default
const config: StorybookConfig
config
;

Builder 选项

你可以通过 core.builder 选项配置底层的 Rsbuild builder。

.storybook/main.ts
import type { 
import StorybookConfig
StorybookConfig
} from 'storybook-react-rsbuild';
const
const config: StorybookConfig
config
:
import StorybookConfig
StorybookConfig
= {
framework: string
framework
: 'storybook-react-rsbuild',
stories: never[]
stories
: [],
core: {
    builder: {
        name: string;
        options: {
            rsbuildConfigPath: string;
            fsCache: boolean;
        };
    };
}
core
: {
builder: {
    name: string;
    options: {
        rsbuildConfigPath: string;
        fsCache: boolean;
    };
}
builder
: {
name: string
name
: 'storybook-builder-rsbuild',
options: {
    rsbuildConfigPath: string;
    fsCache: boolean;
}
options
: {
// Path to your existing rsbuild.config.ts // Defaults to the root rsbuild.config.ts if found
rsbuildConfigPath: string
rsbuildConfigPath
: './custom-rsbuild.config.ts',
// Enable filesystem cache for faster rebuilds // Default: false
fsCache: boolean
fsCache
: true,
// Enable lazy compilation (experimental) // lazyCompilation: true, // Specify Rsbuild environment to use (for multi-environment configs) // environment: 'web', }, }, }, }; export default
const config: StorybookConfig
config
;

选项参考

OptionTypeDefaultDescription
rsbuildConfigPathstringcwd/rsbuild.config.ts待合并的已有 Rsbuild 配置文件路径。
fsCachebooleanfalse启用 Rspack 的持久化文件系统缓存。
lazyCompilationbooleanfalse启用 lazy compilation 以加快开发启动速度。
environmentstringundefined从 Rsbuild 配置中选择特定的 environment

Webpack Addons 兼容性

由于 Rspack 兼容 webpack 的 loader/plugin API,你通常可以使用为 Webpack 设计的 Storybook addon。为此,请使用 webpackAddons 字段而非 addons

.storybook/main.ts
import type { 
import StorybookConfig
StorybookConfig
} from 'storybook-react-rsbuild';
const
const config: StorybookConfig
config
:
import StorybookConfig
StorybookConfig
= {
framework: string
framework
: 'storybook-react-rsbuild',
stories: never[]
stories
: [],
// Addons that depend on Webpack loaders/plugins
webpackAddons: string[]
webpackAddons
: [
'@storybook/addon-coverage', ], }; export default
const config: StorybookConfig
config
;

Framework 选项

framework 特有的选项让你能够为 React、Vue 等定制行为。

React 选项

对于 storybook-react-rsbuild,你可以配置 reactDocgen 和 legacy root API。

.storybook/main.ts
import type { 
import StorybookConfig
StorybookConfig
} from 'storybook-react-rsbuild';
const
const config: StorybookConfig
config
:
import StorybookConfig
StorybookConfig
= {
framework: {
    name: string;
    options: {
        strictMode: boolean;
        legacyRootApi: boolean;
    };
}
framework
: {
name: string
name
: 'storybook-react-rsbuild',
options: {
    strictMode: boolean;
    legacyRootApi: boolean;
}
options
: {
// Configure strict mode
strictMode: boolean
strictMode
: true,
// Use legacy ReactDOM.render instead of createRoot (React 18+)
legacyRootApi: boolean
legacyRootApi
: false,
}, },
stories: never[]
stories
: [],
typescript: {
    reactDocgen: string;
    reactDocgenTypescriptOptions: {
        propFilter: (prop: any) => boolean;
    };
}
typescript
: {
// Configure docgen for TypeScript // 'react-docgen-typescript' | 'react-docgen' | false
reactDocgen: string
reactDocgen
: 'react-docgen-typescript',
// Pass options to react-docgen-typescript-plugin
reactDocgenTypescriptOptions: {
    propFilter: (prop: any) => boolean;
}
reactDocgenTypescriptOptions
: {
propFilter: (prop: any) => boolean
propFilter
: (
prop: any
prop
) => {
return
prop: any
prop
.parent ? !/node_modules/.
RegExp.test(string: string): boolean

Returns a Boolean value that indicates whether or not a pattern exists in a searched string.

@paramstring String on which to perform the search.
test
(
prop: any
prop
.parent.fileName) : true;
}, }, } }; export default
const config: StorybookConfig
config
;

TypeScript 选项

Storybook Rsbuild 使用 @rsbuild/plugin-type-check 进行类型检查。你可以通过 typescript 字段对其进行配置。

.storybook/main.ts
import type { 
import StorybookConfig
StorybookConfig
} from 'storybook-react-rsbuild';
const
const config: StorybookConfig
config
:
import StorybookConfig
StorybookConfig
= {
framework: string
framework
: 'storybook-react-rsbuild',
stories: never[]
stories
: [],
typescript: {
    check: boolean;
    checkOptions: {
        typescript: {
            memoryLimit: number;
        };
    };
}
typescript
: {
// Enable/disable fork-ts-checker-webpack-plugin
check: boolean
check
: true,
// Options passed to fork-ts-checker-webpack-plugin
checkOptions: {
    typescript: {
        memoryLimit: number;
    };
}
checkOptions
: {
typescript: {
    memoryLimit: number;
}
typescript
: {
memoryLimit: number
memoryLimit
: 4096,
}, }, }, }; export default
const config: StorybookConfig
config
;

通用的 TypeScript 配置请参阅 Storybook TypeScript 文档