Storybook
Storybook 是一个流行的在隔离环境中构建 UI 组件的方式。将 Storybook 集成到你的 Turborepo 中,可以轻松地与你的应用程序一起开发你的设计系统。
快速开始
如果你更喜欢使用模板,本指南将介绍如何在 Vercel 上构建此 Storybook/Turborepo 模板。
指南
添加 Storybook 应用程序
在 apps/storybook 目录下,初始化一个新的 Storybook 应用程序
按照提示创建一个应用程序。在本指南的其余部分,我们将假定使用 React 和 TypeScript。
须知:
在完成 Storybook 的入门设置后,你可以卸载入门插件。
为你的 Button 组件设置一个 story
删除 Storybook 模板工具创建的 src/stories 中的 stories 和组件。你将创建自己的。
例如,这是来自 @repo/ui/button 的 Button 组件的一个 story。
将脚本与你的任务对齐
最后,将新的 Storybook 应用程序集成到你的 Turborepo 中
这些脚本现在将与你的 turbo.json 中的 turbo dev 和 turbo build 任务一起运行。
为确保在运行 build 时文件输出被缓存,请将 storybook-static 添加到你的 turbo.json build 任务的 outputs 中


更多技巧
共置 stories
如果你希望将 stories 与它们的源代码共置(而不是将它们放在 Storybook 应用程序中),你需要一些额外的配置。
重新配置 Storybook sources
在 .storybook/main.ts 中,更改 config 中的 stories 路径为你想要捕获的目录。例如,如果你想在 UI 包中编写 stories
将 story 文件移动到 UI 包
按照上面的指南,将 ./apps/storybook/src/stories/Button.stories.tsx 文件移动到 ./packages/ui/src/Button.stories.tsx。
更新组件导入,使其引用现在共置的模块。例如,在 story 的导入中
须知:
你可能还需要根据你的更改和用法更新绝对导入。
你还需要安装编写 stories 所需的任何 Storybook 包。例如,将上面的 story 移动需要你在 @repo/ui 包中安装 @storybook/react。
配置缓存
因为 stories 现在位于 UI 包中,这些 stories 的更改可能会导致依赖于你的 UI 包的任何构建发生缓存未命中。但是,更改 story 并不意味着你的生产应用程序也应该发生缓存未命中。
为防止这种情况,请在根目录的 turbo.json 中将 stories 排除在 build 任务的 inputs 之外。你还需要创建一个 build:storybook 任务,稍后会用到


此外,在 storybook 应用程序中创建一个包配置,以便 stories **被具体地考虑到构建 Storybook 应用程序**


须知:
如果你正在使用已编译包模式,你可能还需要将 ^build 添加到你的 dependsOn 中。
重命名构建脚本
最后,确保你的构建 Storybook 的脚本使用了我们刚刚编写的配置,通过将其重命名为任务的名称
曾经的 "build" 脚本现在是 "build:storybook",以确保 stories 被包含在缓存的哈希中。
验证你的配置
确保你的设置是正确的
- 运行
turbo build:storybook build。你应该会看到缓存未命中。 - 再次运行
turbo build:storybook build。你应该会看到所有缓存命中。 - 在你的
@repo/ui包中做一个 **story** 的代码更改。 - 再次运行
turbo build:storybook build。你应该 **只** 看到 Storybook 应用程序的缓存未命中。所有其他的都应该命中缓存。
添加 CSS
如果你的 UI 包导出自己的 CSS,你需要将其添加到 Storybook 应用的渲染中,类似于你如何将其添加到你的应用程序中。 Storybook 文档建议将其添加到 .storybook/preview.ts 文件中。