框架
Storybook 的架构旨在支持各种 Web 框架,包括 React、Vue、Angular、Web 组件、Svelte 以及其他十几个框架。本指南将帮助您开始为 Storybook 添加新的框架支持。
搭建新的框架
第一步是在自己的仓库中搭建框架支持。
我们建议采用与 Storybook 单体仓库相同的项目结构。该结构包含框架包 (app/<framework>
) 和示例应用程序 (examples/<framework>-kitchen-sink
) 以及其他相关的文档和配置,视情况而定。
这看起来似乎比必要的层次结构要多一些。但是,由于该结构镜像了 Storybook 单体仓库的结构方式,因此您可以重复使用 Storybook 的工具。如果需要,它还可以使您更轻松地将框架移入 Storybook 单体仓库。
我们建议使用 @storybook/html
作为入门框架,因为它是最简单的,并且不包含任何框架特定的特殊性。有一个样板可以帮助您入门 这里。
框架架构
在 Storybook 中支持新的框架通常包括两个主要方面
-
配置服务器。在 Storybook 中,服务器是运行
storybook dev
或storybook build
时运行的节点进程。配置服务器通常意味着以框架特定的方式配置 babel 和 webpack。 -
配置客户端。客户端是在浏览器中运行的代码,配置它意味着提供框架特定的故事渲染函数。
配置服务器
Storybook 有 预设 的概念,预设通常是用于文件加载的 babel/webpack 配置。如果您的框架有自己的文件格式(例如,“.vue”),则可能需要在加载时将它们转换为 JavaScript 文件。如果您假设您的框架的每个用户都需要这个,那么您应该将其添加到框架中。到目前为止,添加到 Storybook 的每个框架都这么做了,因为 Storybook 的核心配置非常简洁。
包结构
在添加框架预设之前,了解 Storybook 的包结构很有帮助。每个框架通常在其 package.json
中公开两个可执行文件
这些脚本将一个 options
对象传递给 @storybook/core/server
,这是一个库,它抽象了 Storybook 所有与框架无关的代码。
例如,以下是使用 storybook dev
启动开发服务器的样板
因此,添加框架预设的本质就是填写该 options 对象。
服务器选项
如上所述,服务器 options
对象负责完成服务器配置的工作。
让我们看看 @storybook/vue
的选项定义
选项 framework
的值(即 'vue')会被传递给 addons,允许 addons 执行与您的框架相关的特定任务。
这个文件的主要内容是框架预设,这些预设是标准的 Storybook 预设 -- 您可以在 Storybook 单仓库中查看框架包(例如,React,Vue,Web Components)来了解框架特定的定制示例。
在开发您自己的框架(不受 Storybook 维护)时,您可以使用 frameworkPath
键指定框架选项文件的位置。
您可以将相对路径添加到 frameworkPath
中。请记住,它们默认情况下会从 Storybook 配置目录(即 .storybook
)解析。
确保 frameworkPath
指向您框架应用程序中的 dist/client/index.js
文件。
配置客户端
要配置客户端,您必须提供一个框架特定的渲染函数。在深入了解细节之前,了解用户编写的 stories 如何与屏幕上渲染的内容相关非常重要。
可渲染对象
Storybook stories 是 ES6 对象,它们返回一个“可渲染对象”。
考虑以下 React story
在这种情况下,可渲染对象是 React 元素 <Button .../>
。
在大多数其他框架中,可渲染对象实际上是一个普通的 JavaScript 对象。
考虑以下假设示例
这个“可渲染对象”的设计是框架特定的,理想情况下应该与该框架的习惯用法相匹配。
渲染函数
框架的渲染函数是负责将可渲染对象转换为 DOM 节点的实体。它通常采用以下形式
包结构
在客户端,关键文件是 src/client/preview.js
globals 文件通常会设置一个全局变量,客户端代码(如 addon 提供的装饰器)可以在需要时引用它,以了解它正在哪个框架中运行
函数 start
将 Storybook 所有与框架无关的客户端(浏览器)代码抽象出来,它接受我们在上面定义的渲染函数。有关渲染函数示例,请参阅 Storybook 单仓库中的 React、Vue、Angular 和 Web Components。