代码片段贡献
添加或更新文档中的代码片段。本页概述了代码片段的结构。
已记录的框架
Storybook 为多种框架维护代码片段。我们努力随着框架 API 的演变保持其最新状态。但是跟踪每个框架中的每个 API 变更非常棘手。
我们欢迎社区对代码片段做出贡献。以下是我们拥有代码片段的框架列表。请帮助我们为您喜爱的框架添加片段。
React | Vue 3 | Angular | Web Components | Svelte | Solid | Ember | HTML | Preact | Qwik |
---|---|---|---|---|---|---|---|---|---|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
代码片段语法
Storybook 文档中引用的代码片段位于 docs/_snippets
目录下,包含支持的框架、特性和语言(即 JavaScript、MDX、TypeScript)的单独 Markdown 文件中。
示例
以下代码块演示了如何在 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 网站正在运行。打开浏览器窗口访问 http://localhost:3000
,点击 Docs 链接打开文档,然后从下拉菜单中选择您的框架。
浏览文档并检查您的工作。
提交您的贡献
验证您的更改按预期工作后,您就可以创建“拉取请求”了。这将让 Storybook 的维护者知道您有要提出的更改。此时,我们可以为您提供反馈并请求更改。为了帮助审查过程,我们鼓励您为您的工作添加清晰的标题和描述。
故障排除
代码片段未显示
如果您记录的示例中包含 packageManager
属性并与另一个示例组合使用,文档可能无法正确显示代码片段。为避免此问题,您可以将示例分成单独的文件并在文档中引用它们。