返回到面向开发者的设计系统
React
章节
  • 简介
  • 架构
  • 构建
  • 审查
  • 测试
  • 文档
  • 分发
  • 工作流程
  • 结论

系统架构设计

如何从组件库中提取设计系统
此社区翻译尚未更新至最新版本的 Storybook。请帮助我们将英文指南中的更改应用到此翻译,以更新它。 欢迎提交 Pull Request.

在第 2 章中,我们将从现有的组件库中提取一个设计系统。在此过程中,我们将确定哪些组件属于设计系统,并概述开发人员在入门时面临的常见挑战。

在大型公司中,此练习与设计、工程和产品团队共同完成。Chromatic(Storybook 背后的公司)和 Storybook 共享一个活跃的前端基础设施团队,为跨 3 个以上属性的 1400 多名开源贡献者提供服务,因此我们将为您概述此过程。

挑战

如果您在开发团队工作,您可能已经注意到,团队规模越大,效率就越低。随着团队的壮大,沟通不畅变得猖獗。现有的 UI 模式没有文档记录,或者完全丢失。这意味着开发人员在重复造轮子,而不是构建新功能。随着时间的推移,项目中充斥着一次性组件。

我们陷入了这种困境。尽管经验丰富的团队拥有良好的意愿,但 UI 组件还是不断地被重建或粘贴到位。本应相同的 UI 模式在外观和功能上却出现了分歧。每个组件都是独一无二的,这使得新开发人员不可能辨别真理来源,更不用说做出贡献了。

UIs diverge

创建设计系统

设计系统将通用的 UI 组件整合到一个维护良好的中央存储库中,并通过包管理器进行分发。开发人员导入标准化的 UI 组件,而不是在多个项目中粘贴相同的 UI 代码。

大多数设计系统不是从头开始构建的。相反,它们是从公司中使用过的、经过实践检验的 UI 组件组装而成,并重新打包为设计系统。我们的项目也不例外。我们将从现有的生产组件库中精选组件,以节省时间并更快地向利益相关者交付我们的设计系统。

What's in a design system

设计系统位于何处?

您可以将设计系统视为另一个组件库,但它服务于整个组织,而不是一个应用程序。设计系统专注于 UI 原语,而特定于项目的组件库可以包含从复合组件到屏幕的任何内容。

因此,我们的设计系统必须独立于任何项目,并且也是所有项目的依赖项。更改通过包管理器分发的版本化包在整个组织中传播。项目可以重用设计系统组件,并在需要时进一步自定义。这些约束为我们组织前端项目提供了蓝图。

Who uses a design system

在 GitHub 上设置存储库

根据 State of JS 调查,React 是最流行的视图层。绝大多数 Storybook 都使用 React,因此我们在本教程中使用它来构建我们的设计系统。

在您的命令行中,运行以下命令

# Clone the files
npx degit chromaui/learnstorybook-design-system-template learnstorybook-design-system

cd learnstorybook-design-system

# Install the dependencies
yarn install
💡 我们使用 degit 从 GitHub 下载文件夹。如果您想手动操作,可以从此处获取内容。

安装完成后,我们可以将其推送到 GitHub(我们将使用它来托管我们设计系统的代码)。首先登录并在 GitHub.com 上创建一个新的存储库

Create a GitHub repository

然后按照 GitHub 的说明创建(目前几乎为空的)存储库

git init
git add .
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/your-username/learnstorybook-design-system.git
git push -u origin main

请务必将 your-username 替换为您的帐户名。

Initial commit to GitHub repository

💡 创建设计系统的其他有效方法包括交付原始 HTML/CSS、使用其他视图层、使用 Svelte 编译组件或使用 Web 组件。选择适合您团队的方法。

哪些属于,哪些不属于

设计系统应仅包含纯粹的展示型组件。这些组件处理 UI 的外观,专门响应 props,不包含特定于应用程序的业务逻辑,并且与数据加载方式无关。这些属性对于允许组件可重用至关重要。

设计系统不是组织中每个组件库的超集。那样的话,跟踪起来会很麻烦。

不应包含包含业务逻辑的特定于应用程序的组件,因为这会限制重用,从而要求使用者项目具有相同的业务约束。

省略当前未被重用的一次性组件。即使您希望它们有一天成为设计系统的一部分,灵活的团队也会尽可能避免维护过多的代码。

创建清单

首要任务是创建组件清单,以识别最常用的组件。这通常涉及手动编目各种网站或应用程序中的屏幕,以识别通用的 UI 模式。设计师如 Brad FrostNathan Curtis 发布了用于盘点组件的便捷方法,因此我们不会在本教程中进一步详细介绍。

对开发人员有用的启发式方法

  • 如果 UI 模式被使用超过三次,则将其转化为可重用的 UI 组件。
  • 如果 UI 组件在 3 个或更多项目/团队中使用,则将其放入您的设计系统中。

Contents of a design system

按照这种方法,我们最终得到 UI 原语:Avatar、Badge、Button、Checkbox、Input、Radio、Select、Textarea、Highlight(用于代码)、Icon、Link、Tooltip 等。这些构建块以不同的方式配置,以在我们客户端应用程序中组装无数独特的功能和布局。

Variants in one component

我们为本教程选择了这些组件的子集,以简化对存储库的推理。一些团队还在其设计系统中包含定制的第三方组件,用于表格和表单等其他组件。

💡 CSS-in-JS:我们使用 Emotion,这是一个旨在用 JavaScript 编写 CSS 样式的库。它提供了一个强大且可预测的样式组合模型。还有其他有效的方法来设置组件样式,包括手动定位类、CSS 模块等。

除了 UI 组件之外,包含在项目中重用的排版、颜色、间距等的样式常量也是有意义的。在设计系统术语中,全局样式变量称为“设计令牌”。我们不会在本指南中深入探讨设计令牌背后的理论,但您可以在网上了解更多信息(这是一篇好文章)。

让我们开始开发吧

我们已经定义了要构建的内容以及如何将其组合在一起。现在是开始工作的时候了。在第 3 章中,我们将为设计系统搭建基本工具。借助 Storybook,我们的原始 UI 组件目录将被编目和可视化。

让您的代码与本章保持同步。在 GitHub 上查看 341ea8a。
这个免费指南对您有帮助吗?发推文表示赞赏,并帮助其他开发人员找到它。
下一章
构建
设置 Storybook 以构建和编目设计系统组件
✍️ 在 GitHub 上编辑 – 欢迎 PR!
加入社区
6,721位开发者及更多
为什么为什么选择 Storybook组件驱动的 UI
开源软件
Storybook - Storybook 中文

特别鸣谢 Netlify CircleCI