代码片段贡献
在文档中添加或更新代码片段。本页概述了代码片段的结构。
已记录的框架
Storybook 为各种框架维护代码片段。我们尽量使它们与框架 API 的演变保持同步。但要跟踪每个框架中的每个 API 更改是很棘手的。
我们欢迎社区为代码片段做出贡献。这是一个我们拥有片段的框架矩阵。请帮助我们为你们喜欢的框架添加代码片段。
| React | Vue 3 | Angular | Web Components | Svelte | Solid | Ember | HTML | Preact | Qwik |
|---|---|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
片段语法
Storybook 文档中引用的代码片段位于docs/_snippets目录下的各个 Markdown 文件中,包含支持的框架、功能和语言(例如 JavaScript、MDX、TypeScript)。
示例
以下代码块演示了如何在 Storybook 文档中构造代码片段,以及可用于为代码片段提供附加上下文的属性。
```ts filename="ButtonGroup.stories.ts" renderer="vue" language="ts" tabTitle="3"
import type { Meta, StoryObj } from '@storybook/vue3-vite';
import ButtonGroup from './ButtonGroup.vue';
//👇 Imports the Button stories
import * as ButtonStories from './Button.stories';
const meta = {
component: ButtonGroup,
}} satisfies Meta<typeof ButtonGroup>;
export default meta;
type Story = StoryObj<typeof meta>;
export const Pair: Story = {
render: (args) => ({
components: { ButtonGroup },
setup() {
return { args };
},
template: '<ButtonGroup v-bind="args" />',
}),
args: {
buttons: [{ ...ButtonStories.Primary.args }, { ...ButtonStories.Secondary.args }],
orientation: 'horizontal',
},
};
``` 代码片段的常用属性
以下是你在 Storybook 文档代码片段中最常使用的属性,以及对每个属性的简要解释,以帮助你理解它们的使用上下文。
文件名作为标题
大多数代码示例应包含文件名,以便读者了解它们与哪个文件相关以及将其粘贴到项目中的何处。对于代码示例,包含用引号括起来的 filename 属性以指示文件名。如果示例与终端命令相关,则此项不是必需的。
```ts filename="Button.stories.ts"
```语言配置
使用 language 属性定义代码片段适用的语言。文档使用此属性来确定显示哪个变体(例如 JavaScript、TypeScript、MDX)。
```ts filename="Button.stories.ts" language="js|ts|mdx"
```特定于框架的代码
使用 renderer 属性指示代码片段属于支持的框架中的哪一个。
```ts filename="Button.stories.ts" language="ts" renderer="react|vue|angular|web-components|ember|html|svelte|preact|qwik|solid"
```或者,如果你在记录适用于多个框架的示例,请使用 renderer 属性和 common 值来指示代码片段与框架无关。
```ts filename="Button.stories.ts" language="ts" renderer="common"
```包管理器配置
使用 packageManager 属性从以下选项中配置示例中使用的包管理器:npm、yarn 或 pnpm。
```shell renderer="common" language="js" packageManager="npm|yarn|pnpm"
```处理多个片段
使用 tabTitle 属性来指定代码片段将显示的选项卡标题。当单个代码片段文件中存在多个示例时,才应使用此属性。
```ts filename="YourComponent.stories.ts" language="ts" renderer="common" tabTitle="Story"
```
```ts filename=".storybook/preview.ts" language="ts" renderer="common" tabTitle="Storybook configuration"
```贡献代码片段
现在你已经熟悉了文档的组织方式、代码片段的结构和可用选项,可以开始为 Storybook 文档做贡献了。假设你已经设置好了本地开发环境并准备好贡献,以下步骤将指导你为 Storybook 文档贡献代码片段。
首先,在你的本地 Storybook monorepo 中创建一个新分支,执行以下命令:
git checkout -b code-snippets-for-framework浏览文档,查找你想要贡献的代码片段。例如,在设置页面上,你应该会看到以下内容:
{/* prettier-ignore-start */}
<CodeSnippets path="your-component.md" usesCsf3 />
{/* prettier-ignore-end */}在 docs/_snippets 目录中打开文件,并调整内容以匹配你要贡献的代码片段。例如:
```ts filename="YourComponent.stories.ts" renderer="qwik" language="ts"
import type { Meta, StoryObj } from 'storybook-framework-qwik';
import type { YourComponentProps } from './YourComponent';
import { YourComponent } from './YourComponent';
//👇 This default export determines where your story goes in the story list
const meta = {
component: YourComponent,
} satisfies Meta<YourComponentProps>;
export default meta;
type Story = StoryObj<YourComponentProps>;
export const FirstStory: Story = {
args: {
//👇 The args you need here will depend on your component
},
};
```继续浏览文档并重复此过程。
预览你的工作
在提交你的贡献之前,我们鼓励你对照 Storybook 网站检查你的工作。这样做可以避免文档中最后一刻出现问题,也是维护者在提交拉取请求后更快合并的一个好方法。但是,如果未能这样做,维护者之一会通知你你的贡献存在问题。
首先,Fork Storybook 的网站仓库并将其克隆到本地。
git clone https://github.com/your-username/web.git导航到 web 目录并安装所需的依赖项。
npm install我们建议你先生成一个网站构建,以确保你可以在本地预览更改并验证一切是否按预期工作。为此,请运行以下命令:
npm run build:frontpage执行此命令后,它将检索成功构建 Storybook 网站所需的必要文件,包括当前文档版本(例如,6.5、7.6、8.x),并将它们按版本号组织并复制到 apps/frontpage/docs/ 目录。
运行 sync-docs 命令将 Storybook monorepo 中的文档连接到 Storybook 网站。出现提示时,提供你的本地 Storybook monorepo Fork 的路径以及你正在处理的文档版本。
npm run sync-docs最后,打开一个新的终端窗口并运行 dev 命令来启动 Storybook 网站。
npm run dev如果一切顺利,你应该会看到 Storybook 网站正在运行。打开浏览器窗口访问 https://:3000,点击 Docs 链接打开文档,然后从下拉菜单中选择你的框架。
浏览文档并检查你的工作。
提交你的贡献
在验证你的更改按预期工作后,你就可以创建一个“拉取请求”了。这将让 Storybook 维护者知道你有一些建议的更改。此时,我们可以给你反馈并要求你进行更改。为了帮助审查过程,我们鼓励你为你的工作添加清晰的标题和描述。
故障排除
代码片段未显示
如果你记录的示例包含 packageManager 属性与另一个示例结合使用,则文档可能无法正确显示代码片段。为避免这种情况,你可以将示例分成单独的文件并在文档中引用它们。
