网易首页 > 网易号 > 正文 申请入驻

从 Styleguidist 迁移到 Storybook

0
分享至

作者丨 Kedar Vaidya 、Benson Pan

译者丨明知山

策划丨 Tina

提供一流的开发者体验是 Yelp 基础设施和工程效率团队的核心原则之一。随着开发人员不断创建新的 React 组件,我们的 React 代码库一直在增长,但我们现有的 React Styleguidist(本文简称 Styleguidist)开发环境无法并行扩展。从 Styleguidist 到 Storybook 的过渡让我们能够为 React 组件提供一个更快、更加友好的开发环境,并更好地协调开发人员和设计人员的工作流程。在这篇文章中,我们将深入探讨我们是如何以及为什么要迁移到 Storybook。

现 状

Styleguidist 是一个交互式 React 组件开发环境,开发人员用它来开发和查看用户界面。Styleguidist 还可以用于生成静态文档页面(样式指南),并分享给其他利益相关者。文档是用 Markdown 创建的,带有代码块,这些代码块在一个单独的交互式沙盒中渲染 React 组件。一个简单的例子如下所示:


The `` component is used to arrange multiple ``components side-by-side.
```jsxconst Button = require('../Button').default;

一个Styleguidist沙盒示例

在 Yelp,我们在使用 Styleguidist 时遇到了各种各样的问题,这些问题导致 React 开发体验欠佳:

  • 由于没有得到广泛的 Web 社区的支持,Styleguidist 缺少插件生态系统,因此 Styleguidist 的插件必须自己从头开发。

  • 在使用大型包时,Styleguidist 不能很好地伸缩,因为它会为包中的每一个示例渲染一个独立的沙盒,导致初始化加载时间和热加载时间变长。

  • 开发人员必须为每个组件创建许多排列,以显示组件可能支持的每一种状态。

  • 通过编辑 Markdown 来修改组件状态对于开发人员和非技术用户来说并不直观。

为什么选择 Storybook

Storybook 是一个开源的 UI 开发和文档工具,过去几年在 Web 社区中越来越流行。它拥有强大的社区支持和丰富的插件生态系统,可用于易访问性测试、跨浏览器测试和其他用途。

在 Storybook 中,用户可以通过 Story 来逐个浏览和开发组件示例。Story 捕获了 React 组件的渲染状态,就像 Styleguidist 的 Markdown 示例一样。这与性能糟糕的 Styleguidist 形成了对比,Styleguidist 总是会渲染包中的每一个组件的每一个示例。

在 Styleguidist 中,开发人员经常需要为组件的每一个可视化排列创建一个示例,从而增加了维护负担(例如,在修改组件 API 后需要更新每一个示例)。在 Storybook 中,开发人员可以通过 react-docgen 自动生成控件,用户可以在文档 UI 中直接修改和预览组件。与 Styleguidist 相比,这进一步简化了用户体验,因为文档用户不再需要通过编辑 Markdown 来修改组件的状态。

一个Styleguidist沙盒示例

迁 移

我们的 React 代码库包含了数千个 Styleguidist 文件,每个文件中都有许多个组件示例。手动迁移它们是不可行的,强制要求开发人员手动用新的 Storybook 格式重写他们的示例也是不合理的。为了保持现有 React 组件示例并减少开发人员在迁移过程中的负担,我们列出了以下这些需求:

  • 我们现有的 Styleguidist 文件使用了 ES5 风格的导入和语法。我们希望新的 Storybook 语法与组件源代码保持一致,所以将使用 ES6。

  • 应该让使用过 Styleguidist 的开发人员对 Storybook 中的文档也感到熟悉。

    • Storybook 支持 MDX,这是一种结合了 Markdown 和 JSX 的文件格式,可以用 Markdown 为文档页面渲染 React 组件,我们可以将现有的 Styleguidist Markdown 转成 MDX。

  • Styleguidist 中的每一个示例代码块都应该被翻译成一个 Story,组件的 stories.js 文件应该包含所有的示例。

为了实现这些目标,我们决定使用 Codemods 将我们的 Styleguidist 文件重构为 Storybook 格式。Codemods 是一系列基于脚本的操作,通过编程的方式对代码库进行转换,在不需要手动介入的情况下进行大规模的自动化修改。

首先,我们提取 Styleguidist 代码块,Markdown 文件中的其余内容(例如文字描述)可以直接逐字复制到新的 MDX 文件中。为了实现一对一的迁移,我们将每个代码块视为一个 Story。我们可以利用现有的工具,比如用 remark-code-blocks 来提取 JavaScript 代码块,用 5to6-codemod 将这些代码块中的 ES5 语法转换为 ES6 语法。


// 之前的代码:// const Button = require('../Button').default;import Button from '../Button';

为了减少开发人员在迁移过程中的负担,我们决定将一个组件的所有 Story 都包含在同一个 component.stories.js 文件中,然后显示在 component.stories.mdx 文档页面中。然后我们发现 MDX 代码块是在相同的上下文中运行的,而且我们关于保持沙盒与 Styleguidist 隔离的假设是不对的。在将多个 Styleguidist 示例转换到同一个文件中时,这个问题尤为严重,因为将多个代码块连接在一起会导致重复导入:


```jsximport Button from '../Button';Full width `ButtonGroup` example:(omitted for brevity)
```jsximport Button from '../Button'; // <-- 这与上面的导入重复了!Disabled `ButtonGroup` example:(omitted for brevity)

在将上面的 Story 合并到同一个 JS 文件中之后,Button 的导入就重复了。我们的 Codemod 需要解析并对这些导入进行去重,以防止出现运行时错误。另外,我们还需要包含 Styleguidist 隐式导入的组件:


// ButtonGroup.stories.jsimport Button from '../Button'; // 去重import { ButtonGroup } from './'; // 显式添加隐式导入的组件

接下来,我们将提取的 Markdown 代码块、去重的导入语句以及 ES 语法写到 component.stories.js 中,并在 component.stories.mdx 文件中写入标准的 Storybook 模板代码:


// ButtonGroup.stories.mdximport { ArgsTable, Canvas, Description, Meta, Story } from '@storybook/addon-docs';import * as stories from './ButtonGroup.stories.js';import { ButtonGroup } from './';
title="yelp-react-component-button/ButtonGroup"component={ButtonGroup}
The `` component is used to arrange multiple ``components side-by-side.

最后,我们需要通过 Storybook 让开发人员知道如何构建组件。我们可以用生产环境现有的 webpack 配置来扩展 Storybook 的构建配置,这样就可以保留 Storybook 的自动 docgen 功能,以及其他一些特性,比如代码块预览。使用现有的 webpack 配置也意味着组件的外观和行为与实际页面中的完全一样。

结 论

将 React 组件示例从 Styleguidist 迁移到 Storybook 极大地提升了开发者体验和组件性能。我们能够利用 Storybook 的特性,如按需加载,通过在编译时生成更小的包来提升性能,从而缩短沙盒的启动时间。基于我们的 Codemod 迁移策略,我们能够转换代码库中几乎所有的示例,而且不会出现运行时错误,在迁移过程中也不会对开发人员造成阻碍。

切换到 Storybook 为 Yelp 打开了新的大门,我们很高兴能在上面添加插件,进一步提升前端开发人员的工作效率。

我们希望我们的分享能够为其他面对类似迁移的团队带来有用的信息!

https://engineeringblog.yelp.com/2022/07/migrating-from-styleguidist-to-storybook.html

声明:本文为 InfoQ 翻译,未经许可禁止转载。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
“跌落神坛”的5大保健品,实际根本没有什么用,你吃过哪几种?

“跌落神坛”的5大保健品,实际根本没有什么用,你吃过哪几种?

梦录的西方史话V
2024-06-19 18:05:56
中美突然爆发电子大战,菲律宾北部通讯瘫痪,中方下令:全体出击

中美突然爆发电子大战,菲律宾北部通讯瘫痪,中方下令:全体出击

博文聊世界
2024-07-06 07:12:49
被禁止整容的“小芈月”长大了!15岁纯天然美貌曝光

被禁止整容的“小芈月”长大了!15岁纯天然美貌曝光

古今历史记
2024-07-06 11:02:54
蒙克:早就知道了自己会和国王续约 保守秘密的感觉很有趣

蒙克:早就知道了自己会和国王续约 保守秘密的感觉很有趣

直播吧
2024-07-07 18:13:11
体检不做5个检查,相当于白做,得了癌症都不知道

体检不做5个检查,相当于白做,得了癌症都不知道

DrX说
2024-05-13 14:37:40
ISW讽刺欧尔班穿梭外交真正目的:既无实力,也无正义,就会演戏

ISW讽刺欧尔班穿梭外交真正目的:既无实力,也无正义,就会演戏

探索星空
2024-07-07 14:53:30
安徽一男子在奶茶店内公开小便!品牌方回应

安徽一男子在奶茶店内公开小便!品牌方回应

鲁中晨报
2024-07-07 21:03:03
男子吃酒席分了一包好烟,拿到小卖部问老板娘能不能给他老婆换点吃的!

男子吃酒席分了一包好烟,拿到小卖部问老板娘能不能给他老婆换点吃的!

张晓磊
2024-07-06 05:54:44
太心酸了!就业形势有多严峻?网友:已经颠成我不敢想象的样子了

太心酸了!就业形势有多严峻?网友:已经颠成我不敢想象的样子了

时尚的弄潮
2024-06-28 00:45:46
高德活爹”到底能有多癫!网友:高架上走7公里,被自己蠢哭了

高德活爹”到底能有多癫!网友:高架上走7公里,被自己蠢哭了

奇特短尾矮袋鼠
2024-06-29 15:50:19
湖南发布高温黄色预警,省内局部地区将达37℃以上高温

湖南发布高温黄色预警,省内局部地区将达37℃以上高温

北青网-北京青年报
2024-07-07 18:31:04
越来越多人得癌症,医生提醒:洗碗时的6个坏习惯,千万别再做了

越来越多人得癌症,医生提醒:洗碗时的6个坏习惯,千万别再做了

DrX说
2024-06-03 13:58:54
经济形势有多严峻?3个现象席卷中国各地,预示苦日子已开始?

经济形势有多严峻?3个现象席卷中国各地,预示苦日子已开始?

山丘楼评
2024-06-07 11:45:11
取消对华免签,还拒绝中国的高铁,甚至放言:“不欢迎中国人”!

取消对华免签,还拒绝中国的高铁,甚至放言:“不欢迎中国人”!

星辰故事屋
2024-06-18 10:54:05
“娱乐圈第一狗仔”卓伟爆出的惊天大瓜,个个轰动,次次实锤

“娱乐圈第一狗仔”卓伟爆出的惊天大瓜,个个轰动,次次实锤

圈里的甜橙子
2024-07-06 17:40:51
卢嘉丽性贿赂大案揭秘

卢嘉丽性贿赂大案揭秘

伍伍六六
2024-05-13 11:41:12
欧洲杯4强浮现:西班牙被淘汰,英格兰回家,2大黑马逆袭,太刺激

欧洲杯4强浮现:西班牙被淘汰,英格兰回家,2大黑马逆袭,太刺激

侃球熊弟
2024-07-05 02:10:02
本以为是烂片,结果上映就票房第一,王传君又把国产片拍成了爆款

本以为是烂片,结果上映就票房第一,王传君又把国产片拍成了爆款

咖啡店的老板娘
2024-07-06 23:20:57
光天化日“为爱鼓掌”!这对中国留学生在泰国出名了...

光天化日“为爱鼓掌”!这对中国留学生在泰国出名了...

猫小狸同学
2024-07-07 12:18:15
央行:已与几家主要金融机构签订债券借入协议 持续借入并卖出国债

央行:已与几家主要金融机构签订债券借入协议 持续借入并卖出国债

财联社
2024-07-05 09:46:11
2024-07-07 22:46:44
InfoQ
InfoQ
有内容的技术社区媒体
9981文章数 50321关注度
往期回顾 全部

科技要闻

临时加关税 欧版"元PLUS"成本涨近8000欧元

头条要闻

香港人到深圳"反向消费" 有老人拉小推车买一周的菜量

头条要闻

香港人到深圳"反向消费" 有老人拉小推车买一周的菜量

体育要闻

转发这篇索斯盖特,你也能运气爆棚!

娱乐要闻

49岁林志玲在日本带娃被偶遇

财经要闻

齐创阶段新高 一线城市楼市又可以了?

汽车要闻

18.98万起 宝马新电动MINI COOPER上市

态度原创

游戏
时尚
家居
本地
手机

VCT太平洋赛区季后赛名额全部产生:PRX全胜拿下常规赛第一

夏天少穿裤子吧,不试试这些“裙子”,你都不知道自己有多美

家居要闻

自然韵律 木质家居的宁静美学

本地新闻

云游中国 | 走进安塞,寻觅黄土高原文化记忆

手机要闻

苹果 iOS 播放器 Infuse 通过 ICP 备案:Pro 订阅年费限时 18 元

无障碍浏览 进入关怀版