返回博客

富文檔 (Rich docs) 与 Storybook MDX

组件和文档的和谐统一

loading
Michael Shilman
@mshilman
最后更新

Storybook 是 UI 组件开发的标准工具。它被用于构建网络上最流行的设计系统,包括 Shopify PolarisIBM CarbonSalesforce LightningAuth0 CosmosAirbnb Lunar

像这样的高质量文档对于帮助人们重用您的 UI 组件至关重要,但要做到这一点也非常令人头疼。实际上,您花在维护文档系统上的时间比实际编写文档的时间还要多!

这就是为什么在 Storybook,我们致力于让 UI 组件文档变得快速而简单。我们的第一步是 DocsPage,一个从现有 stories 中自动生成最佳实践文档的工具。

而今天,我很高兴地宣布,在 Storybook 5.3 中,通过 MDX 支持的快速、完全可定制的文档!🎉

MDX 使您能够使用自己的组件自定义 Storybook 的自动生成文档,混合搭配 DocBlocks,并将非技术团队成员纳入其中。所有这些都在 Markdown 的舒适范围内完成。

  • 🎨 可定制的文档: 简单实现完全可定制的文档。
  • 📦 现成的构建块: 重用 Storybook 强大的 DocBlocks。
  • 🤝 共同编写文档: 对开发者强大,对设计师和产品经理友好
  • 🔌 100% 兼容: 无缝的 Storybook 集成,零配置

💡 有什么大不了的?

今年早些时候,团队提出了一个 雄心勃勃的愿景,旨在重新思考组件文档。我们的第一个里程碑是 Storybook 5.2,它引入了 DocsPage,可以从您现有的 stories 中自动生成最佳实践 UI 文档。

Storybook Docs 迅速走红,在几周内就成为最受欢迎的文档工具之一(按 npm 下载量 统计)!但即使团队拥抱了 DocsPage,他们编写完全自定义文档的愿望也显而易见。

Storybook MDX 为组件作者提供了无与伦比的灵活性、简洁性和易用性的平衡。 MDX 是一种开放的、可编写的格式,它在同一个文件中流畅地交织 Markdown 和 JSX 组件。这使得将现成的构建块(如颜色方案、排版样本和属性表)组合成长篇文档变得容易。

此外,直接的 MDX 编写体验意味着设计师、产品经理和任何熟悉 Markdown 的人都可以为共享 UI 文档做出贡献。大胆的预发布用户已经在将 Storybook 作为其组件库和设计系统的单一事实来源


Storybook MDX 是我的梦想文档系统。我保留了 Storybook 受欢迎的“Canvas”的强大功能和灵活性,现在有了一种功能齐全的方式来编写优美且可移植的长篇文档,真正抓住了我们设计系统的核心。 — Vince Speelman,前端工程师 @ TEDtalks

📝 MDX 简化了文档编写

Storybook 5.3 的关键新增功能是 MDX 支持。MDX(“组件时代的 markdown”)是一个基础项目,它流畅地混合了 markdown 和嵌入式 JSX 组件。下面是一个 MDX story 的样子

您可能在像 # BadgeLet's defineWe can even 这样的块中认出了 Markdown。还有一些 JSX 元素

  • Meta 是一个将您的组件置于 Storybook 中的元素。
  • Story 定义了一个新的 story(或引用了一个现有的 story)。
  • Preview 框定了一个(或多个)story 并显示它们的源代码。

这些DocBlocks构成了 Storybook MDX 的基础。我们将在下一节介绍更多。

但在那之前,让我们先看一个完整的示例:REAVIZ,一个在 Storybook 中构建和记录的 React 可视化库。它在一个 Storybook 中展示了主题化、静态 markdown 页面、自定义 MDX 和 DocsPage。

在 GitHub 上查看

📦 重用 Storybook 的现成构建块

除了渲染 stories,包含其他设计系统文档也很有用,例如属性表、颜色方案和排版。

我们为组件的 API 制作了一个属性表 DocBlock。

<Props of={AvatarList} />

当应用于 React 组件时,它会显示每个属性的名称、描述、类型和默认值

Patrick LafranceFrancis Thibault 花了很多精力来做好这一点。当应用于其他框架时 — 例如由 Aaron PoolShota Fuji 维护的 Vue / 由 Kai Röder 维护的 Angular / 由 Thomas Allmer 维护的 Web Components / 由 Matthew Irish 维护的 Ember — 属性表会分为诸如输入、输出、插槽、事件等部分。更多细节将在另一篇文章中公布!😘

在 Storybook MDX 中记录您的样式也很容易。颜色方案、图标和排版开箱即用。未来,您将能够与不同的设计令牌来源实现更紧密的集成,这基于 Philipp Siekmannstorybook-design-token 中的出色工作。

# Colors

<ColorPalette>
  <ColorItem
    title="theme.color.greyscale"
    subtitle="Some of the greys"
    colors={['#FFFFFF', '#F8F8F8', '#F3F3F3']}
  />
  ...
</ColorPalette>

# Icons

<IconGallery>
  <IconItem name="add"><ExampleIcon icon="add" /></IconItem>
  ...
</IconGallery>

# Typography

<Typeset fontSizes={['12px', '14px', ...]} sampleText="Heading" />

Storybook Docs 为我们所有的组件提供了人类可读的文档。MDX 降低了复杂性,并使组织中的所有部分都能参与到对话中。 — Sean Luo,软件工程师 @ Kickstarter

🤝 为您的整个团队提供 UI 文档

Storybook 最初是一个用于组织、开发、记录和测试组件的开发工具。随着其受欢迎程度的提高,团队开始将他们的 Storybook 用作设计师、产品经理和 QA 的共享资源。

通过 MDX,非技术团队成员现在可以帮助更新共享的 UI 文档。这能让您的同事参与进来,并减少您的维护工作。这是一种双赢的局面,开启了 Storybook 支持跨职能协作的新方向。

🔌 与生态系统无缝集成

Storybook MDX 与 Storybook 生态系统的其余部分 100% 兼容。

有了 Storybook MDX 带来的所有功能,您可能会猜测将其集成到 Storybook 庞大的原型设计、审查、测试、文档和协作工具及服务的生态系统中会很困难。幸运的是,您错了!

今年早些时候,我们引入了 Component Story Format (CSF),这是一种基于 ES6 模块导出的组件示例的开放标准。CSF 是 Storybook 的基础。在底层,我们的 MDX stories 会被透明地编译成 CSF。这意味着任何可以加载 CSF 的东西都可以加载 Storybook MDX,而无需额外的集成。

我们通过添加 webpack 加载器在 Storybook 本身展示了这一点,并通过添加一个用于 Storyshots(我们开源的 DOM 快照库)的 jest transformer 在 Jest 中展示了这一点。Chromatic 等云服务在第一天就内置了对 MDX 的完全支持。

⚡️ 1 分钟安装

想要吗?首先将您的项目升级到 Storybook 5.3-rc

npx npm-check-updates '/storybook/' -u
npm install # or yarn if you prefer

然后将 docs 添加到现有项目中

npm install @storybook/addon-docs --save-dev # or yarn

最后,在您的 .storybook/main.js 文件中添加以下行

module.exports = {
  addons: ['@storybook/addon-docs'];
}

有关配置 MDX 的更多信息,请阅读安装说明

🚀 我们需要您的帮助来使 Docs 变得更好

您可以做的最简单的帮助就是将 Storybook 5.3-rc 安装到您的项目中,并在我们的 GitHub 项目中提问和/或提交 bug。如果您发现可以修复的 bug,我们欢迎所有贡献!

此外,我们还有很多正在进行的工作

  • 我们正在扩展支持增强文档的框架集。React 在 5.2 中,Vue/Angular/Web Components/Ember 在 5.3 中。我们很乐意在您的帮助下添加 Svelte 和其他框架。
  • 我们正在创建一个丰富的 DocBlocks 库,例如用于组件的 GitHub 协作者头像、组件状态徽章等。
  • 最后,我们还希望能够将 Storybook 文档嵌入到其他文档系统中,例如 Gatsby

如果您有兴趣在这方面进行合作,或者只是想了解最新动态,项目社区主要活跃在我们的 Discord#docs-mode 频道。

🙏 感谢社区

Storybook Docs 由 Michael Shilman(我!)、Atanas StoyanovPatrick LafranceFrancis ThibaultAaron PoolShota FujiKai RöderTom ColemanNorbert de LangenLionel BenychouMatthew IrishThomas AllmerIgor Davydkin 开发。设计和主题化由 Dominic Nguyen 负责。特别感谢 MDX 的早期采用者 Austin McDanielVince SpeelmanKevin SuttleAlex WilsonTom Speak。非常感谢 Brad Frost 在设计系统项目上的指导。

如果 Storybook 使您的 UI 开发工作流程更容易,请帮助 Storybook 变得更好。您可以贡献一个新功能,修复一个 bug,或改进文档。加入我们的Discord,在Open Collective上支持我们,或者直接在GitHub上参与。

加入 Storybook 邮件列表

获取最新消息、更新和发布信息

7,468开发者及更多

我们正在招聘!

加入 Storybook 和 Chromatic 团队。构建被数十万开发人员在生产中使用的工具。远程优先。

查看职位

热门帖子

2019年 Storybook 状态

社区、产品和生态系统的爆发年
loading
Michael Shilman

面向新框架的 Storybook Docs

Vue、Angular、Web Components 和 Ember 的最佳实践文档
loading
Michael Shilman

Storybook 5.2

世界一流的设计系统基础设施
loading
Michael Shilman
加入社区
7,468开发者及更多
原因为什么选择 Storybook组件驱动的 UI
文档指南教程更新日志遥测
社区插件参与进来博客
展示探索项目组件词汇表
开源软件
Storybook - Storybook 中文

特别感谢 Netlify CircleCI