集成 Storybook
Storybook 是一种在隔离环境中构建 UI 组件的流行方式。将 Storybook 放入 Turborepo 中,你可以轻松地在应用程序旁边开发你的设计系统。
快速开始
如果你更喜欢使用模板,本指南将介绍如何在 Vercel 上构建这个 Storybook/Turborepo 模板。
指南
在 apps/storybook 目录中,初始化一个新的 Storybook 应用程序:
按照提示创建应用程序。对于本指南的其余部分,我们假设使用 React 和 TypeScript。
Good to know:
在完成 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 任务的输出中:


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


此外,在 storybook 应用程序中创建 包配置,以便在特别是构建 Storybook 应用程序时考虑到 stories:


Good to know:
如果你使用的是
编译包模式,你可能还需要在
dependsOn 中添加 ^build。
重命名构建脚本
最后,确保你构建 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 文件中。

