关于 storybook
这是一项面向 TypeScript 和 React 组件库的 Storybook 9+ 参考技能,包含 52 条规则。它帮助开发者覆盖组件生命周期中的故事配置、测试、无障碍检查、文档编写和交付。
主要功能
- 01涵盖八类主题的 52 条规则
- 02Storybook 配置与 CSF3 编写指引
- 03Args、控件、装饰器与组合
- 04交互测试与无障碍检查
- 05文档、设计系统与部署
适用场景
- 01为 React 组件库配置 Storybook
- 02编写故事并设置控件
- 03运行交互测试和无障碍检查
- 04编写设计系统文档并准备构建供评审
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill storybook安装后在 Claude Code 中输入/storybook确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
AGENTS.mdgotchas.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mdargs-derive-from-component-props.mdargs-explicit-control-for-unions.mdargs-no-jsx-in-args.mdargs-pick-args-vs-parameters-vs-globals.mdargs-use-fn-for-callbacks.mdaxe-context-for-portals.mdaxe-disable-rules-not-stories.mdaxe-globals-manual-for-intentional-violations.mdaxe-restrict-runonly-to-wcag-aa.mdaxe-set-test-error-globally.mdbuild-cache-storybook-in-ci.mdbuild-chromatic-modes-multi-theme.mdbuild-deploy-static-build-to-shareable-host.mdbuild-manager-brand.mdbuild-prefer-vite-over-webpack.mdbuild-storybook-composition-refs.mdbuild-trim-test-bundle.mdconfig-add-addons-via-cli.mdconfig-narrow-stories-glob.mdconfig-pick-the-right-framework-package.mdconfig-static-dirs-not-bundler-imports.mdconfig-story-sort-for-large-libraries.mdconfig-tokens-css-vars-in-preview.mdconfig-typed-main-config.mdconfig-typed-preview.md详细介绍
dot-skills Storybook 最佳实践
全面介绍如何将 Storybook 9+ 用作 TypeScript/React 组件库的工作坊和测试平台。涵盖 8 个类别中的 52 条规则,按组件在设计系统中的生命周期排序:错误的 .storybook/main.ts 会影响所有故事;格式错误的 CSF Meta 会导致该文件无法使用 autodocs、控件、测试和 a11y 面板。
本技能涵盖的内容
- 设置 —
main.ts、preview.ts、框架选择(Vite 还是 Webpack、Next.js 还是仅 React)、通过 CLI 安装插件、staticDirs。 - 编写故事(CSF3) —
satisfies Meta<typeof Component>、具名导出 = 故事、tags: ['autodocs']的放置位置、何时适合使用render、故事命名约定。 - Args、argTypes、控件 — 何时依赖推断、何时声明
control: 'select'、使用storybook/test中的fn()处理回调、args、parameters 与 globals 的区别。 - 装饰器与组合 — 在
preview.ts中配置全局提供程序、使用 MSW 模拟网络请求、子路径导入模块模拟(Storybook 9+)、装饰器签名中的常见问题。 - 交互测试 —
play函数、storybook/test导入路径(而非@storybook/test)、解构canvas/userEvent、优先使用findBy*而非waitFor、在 CI 中使用addon-vitest、可移植故事。 - 无障碍(通过
@storybook/addon-a11y使用axe-core) — 将parameters.a11y.test = 'error'作为实际门槛、按规则禁用检查、使用runOnly限定 WCAG 目标范围、门户的context、使用globals.a11y.manual标记有意违规的测试样例。 - 文档与设计系统 — autodocs 与 MDX、在 MDX 中使用
<Canvas of={...} />引用故事、状态标签、将设计令牌作为故事、通过parameters.design添加 Figma 链接。 - 构建与部署 — 优先使用 Vite 而非 Webpack、大型库按需打包、部署到 Chromatic/Vercel 供设计师审阅、CI 缓存配置。
适用场景
遇到以下情况时,请使用本技能:
- 编辑或创建会加载
storybookTest的*.stories.tsx、*.mdx、.storybook/main.ts、.storybook/preview.ts或vitest.config.ts。 - 在新项目中设置 Storybook(选择框架、完成
npx storybook init后续配置)。 - 添加或升级插件(a11y、vitest、designs、msw)。
- 通过
play函数和 Vitest 插件连接组件测试。 - 排查“Storybook 很慢”“控件显示文本而不是下拉选择”“我的对话框没有显示 a11y 面板”“CI 中的 play 函数不稳定”等问题。
以下情况请跳过本技能,改用:
- 使用
react-optimise/clean-code-ts-react处理底层组件设计。 - 在 Storybook 之外,使用
react-testing-library了解render/screen/userEvent的语义。 - 使用 WCAG/ARIA 参考文档了解规范本身;本技能假定你了解
aria-labelledby的作用,并说明addon-a11y如何检查它。
按优先级划分的规则类别
顺序反映了组件生命周期(配置 → 编写 → 接入 → 装饰 → 测试 → 审核 → 编写文档 → 发布)。前面的阶段会产生连锁影响。
| 优先级 | 类别 | 影响 | 前缀 | 规则数 |
|---|---|---|---|---|
| 1 | 设置与配置 | CRITICAL | config- | 8 |
| 2 | 编写故事(CSF3) | CRITICAL | csf- | 8 |
| 3 | Args、ArgTypes 与控件 | HIGH | args- | 5 |
| 4 | 装饰器与组合 | HIGH | deco- | 7 |
| 5 | 交互测试 | HIGH | test- | 7 |
| 6 | 无障碍(axe) | HIGH | axe- | 5 |
| 7 | 文档与设计系统 | MEDIUM-HIGH | docs- | 5 |
| 8 | 构建、性能与部署 | MEDIUM | build- | 7 |
快速参考
1. 设置与配置(关键)
config-typed-main-config— 使用satisfies StorybookConfig为main.ts添加类型config-pick-the-right-framework-package— 使用与构建方式匹配的框架包(例如,Next.js 使用@storybook/nextjs-vite)config-narrow-stories-glob— 将storiesglob 缩小到仅匹配故事文件config-typed-preview— 使用框架的Preview类型为preview.ts添加类型config-add-addons-via-cli— 使用npx storybook add安装插件,绝不要手动安装config-static-dirs-not-bundler-imports— 通过staticDirs提供资源,而非使用打包工具导入config-tokens-css-vars-in-preview— 将 Style Dictionary / Tokens Studio 的输出作为 CSS 变量接入preview.tsconfig-story-sort-for-large-libraries— 为设计系统侧边栏设置parameters.options.storySort顺序(基础 → 组件 → 模式)
2. 故事编写 — CSF3(关键)
csf-satisfies-meta-not-typed— 使用satisfies Meta<typeof Component>,绝不要使用: Meta<typeof Component>csf-prefer-args-over-render— 默认使用args;仅在复合故事中使用rendercsf-set-meta-component-explicitly— 始终设置meta.component(自动文档、控件和类型都依赖它)csf-name-stories-by-state— 根据用户可见状态命名故事,而非根据属性值命名csf-tags-autodocs-on-meta—tags: ['autodocs']应放在 meta 上,而非单个故事上csf-co-locate-stories-with-component— 将Component.stories.tsx与Component.tsx放在同一目录csf-default-export-is-the-meta— 默认导出 = meta;具名导出 = 故事csf-title-hierarchy-for-design-systems— Metatitle: 'Components/Inputs/Button'分类体系(基础 / 组件 / 模式 / 示例)
3. Args、ArgTypes 与控件(高)
args-derive-from-component-props— 让argTypes自动推断;仅声明无法推断的内容args-use-fn-for-callbacks— 对回调 args 使用storybook/test中的fn()args-explicit-control-for-unions— 对无法推断的联合类型声明control+optionsargs-no-jsx-in-args—args中不要包含 JSX;在render中组合 JSXargs-pick-args-vs-parameters-vs-globals—args= 组件输入,parameters= 插件配置,globals= 工具栏状态
4. 装饰器与组合(高)
deco-global-providers-in-preview— 将 Theme/QueryClient/Intl providers 放在preview.ts中deco-msw-for-network-mocks— 使用 MSW 模拟网络层;不要替换 SDKdeco-mock-modules-with-subpath-imports— 通过package.json#imports模拟非网络模块deco-decorator-component-not-call— 将装饰器渲染为<Story />,而不是{story()}deco-context-aware-decorators— 从context中读取globals和parameters,以创建响应式包装器deco-themes-addon-for-multi-brand— 使用@storybook/addon-themes的withThemeByClassName/withThemeByDataAttribute实现多品牌切换deco-rtl-direction-toggle— 工具栏中的dir切换开关,用dir="rtl"包装每个 story,以检测双向文本回归问题
5. 交互测试(高)
test-import-from-storybook-test— 从storybook/test导入(Storybook 9+),而不是@storybook/testtest-await-every-userevent-call— 对每次userEvent调用都使用awaittest-use-canvas-from-play-arg— 从 play 参数中解构出canvas/userEventtest-fn-for-spied-callbacks— 使用args: { onSubmit: fn() },然后通过expect(args.onSubmit).toHaveBeenCalledWith(...)进行断言test-findby-over-waitfor— 优先使用findByRole,而不是waitFor+getByRoletest-vitest-addon-for-ci— 在 CI 中通过@storybook/addon-vitest运行 play,而不是使用旧版 test-runnertest-portable-stories-for-rtl— 通过composeStories在 RTL/Vitest 测试中复用 stories
6. 无障碍 — axe(高)
axe-set-test-error-globally— 在preview.ts中设置parameters.a11y.test = 'error',作为真正的门禁axe-disable-rules-not-stories— 禁用特定规则;绝不要对整个 story 设置test: 'off'axe-restrict-runonly-to-wcag-aa— 将runOnly限定为你的 WCAG 目标级别(通常为 AA)axe-context-for-portals— 为渲染到 portals 中的组件设置parameters.a11y.contextaxe-globals-manual-for-intentional-violations— 为有意违反规则的 fixtures 设置globals.a11y.manual: true
7. 文档与设计系统(中高)
docs-autodocs-vs-mdx— 组件页面使用 Autodocs,跨主题文档使用 MDXdocs-mdx-references-stories— 使用<Canvas of={Story} />,而不是内联渲染docs-component-status-tags— 使用状态标签和侧边栏徽章展示生命周期docs-design-tokens-as-stories— 将设计令牌作为 stories 编写文档,以进行视觉回归测试docs-figma-link-via-design-addon— 通过parameters.design将每个 story 链接到对应的 Figma 画板
8. 构建、性能与部署(中)
build-prefer-vite-over-webpack— 优先使用基于 Vite 的框架包,而非旧版 Webpackbuild-trim-test-bundle— 通过main.ts的build.test配置精简 Vitest-addon 测试构建build-deploy-static-build-to-shareable-host— 为每个 PR 将storybook build部署到 Chromatic/Vercelbuild-cache-storybook-in-ci— 在 CI 中缓存 Vite/Webpack 和 Playwright 层build-storybook-composition-refs— 在main.ts中使用refs,将多包设计系统组合到一个主 Storybook 中build-manager-brand— 使用create()配置.storybook/manager.ts,设置 Logo、品牌链接和侧边栏配色build-chromatic-modes-multi-theme— 通过 Chromaticmodes跨主题、视口和方向为每个 Story 创建快照
如何使用
- 从 references/_sections.md 开始,了解类别结构和影响原因。
- 如果你正在设置 Storybook,请阅读所有
config-规则,然后阅读csf-规则。 - 如果你要编写新 Story,请阅读
csf-和args-规则。 - 如果你想为 Story 添加测试,请阅读
test-和deco-msw-for-network-mocks。 - 如果你希望 a11y 违规导致 CI 失败,请阅读所有
axe-规则。 - 如果你要从头构建设计系统,请按以下顺序阅读:
config-tokens-css-vars-in-preview、config-story-sort-for-large-libraries、csf-title-hierarchy-for-design-systems、deco-themes-addon-for-multi-brand、build-manager-brand、build-chromatic-modes-multi-theme。然后阅读docs-component-status-tags和docs-design-tokens-as-stories,了解治理和 Token 展示层。 - 如果你有一个多包单体仓库设计系统,请先阅读
build-storybook-composition-refs,然后按照上述设计系统路径阅读。 - 如果你需要 RTL / 多方向覆盖,请先阅读
deco-rtl-direction-toggle,然后阅读build-chromatic-modes-multi-theme,将 RTL 接入视觉回归测试。 - 对于
gotchas.md:这里记录了随时间发现的故障模式;调试不常见问题前务必查看。 - 使用
assets/templates/_template.md添加新规则。
参考文件
| 文件 | 描述 |
|---|---|
| references/_sections.md | 类别定义和排序 |
| assets/templates/_template.md | 添加新规则的模板 |
| gotchas.md | 随时间累积的故障模式 |
| metadata.json | 版本、参考资料、摘要 |
相关技能
clean-code-ts-react— 底层组件设计质量(命名、函数结构、抽象)。react-testing-library— 在 Storybook 之外使用时的 RTL 查询和模式。web-interface-guidelines— 用于编写组件文档的 Vercel Web Interface Guidelines。
评论
支持 Markdown