文件設定
Storybook 文件

設定 Storybook

Storybook 透過名為 .storybook 的資料夾進行設定,其中包含各種設定檔。

請注意,您可以透過將 -c 標記設定為 storybook devstorybook build CLI 命令來變更 Storybook 使用的資料夾。

設定您的 Storybook 專案

Storybook 的主要設定 (即 main.js|ts) 定義了您的 Storybook 專案的行為,包括您的 stories 位置、您使用的擴充功能、功能標記和其他專案特定設定。此檔案應位於您專案根目錄的 .storybook 資料夾中。您可以使用 JavaScript 或 TypeScript 撰寫此檔案。以下列出可用的選項以及如何使用它們的範例。

.storybook/main.ts
// Replace your-framework with the framework you are using (e.g., react-webpack5, vue3-vite)
import type { StorybookConfig } from '@storybook/your-framework';
 
const config: StorybookConfig = {
  // Required
  framework: '@storybook/your-framework',
  stories: ['../src/**/*.mdx', '../src/**/*.stories.@(js|jsx|mjs|ts|tsx)'],
  // Optional
  addons: ['@storybook/addon-essentials'],
  docs: {
    autodocs: 'tag',
  },
  staticDirs: ['../public'],
};
 
export default config;

此設定檔是一個 preset,因此具有強大的介面,可以進一步自訂。請閱讀我們關於撰寫 presets 的文件以了解更多資訊。

設定元素描述
stories指示 story 檔案位置的 glob 陣列,相對於 main.js
staticDirs設定要由 Storybook 載入的 靜態檔案目錄清單
staticDirs: ['../public']
addons設定由 Storybook 載入的 擴充功能清單
addons: ['@storybook/addon-essentials']
typescript設定 Storybook 如何處理 TypeScript 檔案
typescript: { check: false, checkOptions: {} }
framework根據一組 框架特定設定來設定 Storybook
framework: { name: '@storybook/svelte-vite', options:{} }
core設定 Storybook 的 內部功能
core: { disableTelemetry: true, }
docs設定 Storybook 的 自動產生文件
docs: { autodocs: 'tag' }
features啟用 Storybook 的 額外功能
請參閱下表以取得可用功能列表
refs設定 Storybook 組合
refs: { example: { title: 'ExampleStorybook', url:'https://your-url.com' } }
logLevel設定 Storybook 在瀏覽器終端機中的日誌。對於偵錯很有用
logLevel: 'debug'
webpackFinal自訂 Storybook 的 Webpack 設定
webpackFinal: async (config:any) => { return config; }
viteFinal當使用 vite 建構器時,自訂 Storybook 的 Vite 設定
viteFinal: async (config: Vite.InlineConfig, options: Options) => { return config; }
env定義自訂 Storybook 環境變數
env: (config) => ({...config, EXAMPLE_VAR: 'Example var' }),
build透過從 bundle 中排除特定功能,優化 Storybook 生產版本的 build 以提升效能。當縮短建置時間是優先考量時非常有用。
build: { test: {} }

設定 story 載入

預設情況下,Storybook 將根據 .storybook/main.js|ts 中的 glob (模式比對字串) 從您的專案載入 stories,該 glob 比對您專案中所有擴展名為 .stories.* 的檔案。目的是讓您將 story 檔案與其文件化的元件放在一起。

•
└── components
    ├── Button.js
    └── Button.stories.js

如果您想使用不同的命名慣例,您可以使用 picomatch 支援的語法來變更 glob。

例如,如果您想從 my-project/src/components 目錄中提取 .md.js 檔案,您可以寫成

.storybook/main.ts
// Replace your-framework with the framework you are using (e.g., react-webpack5, vue3-vite)
import type { StorybookConfig } from '@storybook/your-framework';
 
const config: StorybookConfig = {
  framework: '@storybook/your-framework',
  stories: ['../my-project/src/components/*.@(js|md)'],
};
 
export default config;

使用設定物件

此外,您可以自訂您的 Storybook 設定,以根據設定物件載入您的 stories。例如,如果您想從 packages/components 目錄載入您的 stories,您可以將您的 stories 設定欄位調整為以下內容

.storybook/main.ts
// Replace your-framework with the framework you are using (e.g., react-webpack5, vue3-vite)
import type { StorybookConfig } from '@storybook/your-framework';
 
const config: StorybookConfig = {
  framework: '@storybook/your-framework',
  stories: [
    {
      // 👇 Sets the directory containing your stories
      directory: '../packages/components',
      // 👇 Storybook will load all files that match this glob
      files: '*.stories.*',
      // 👇 Used when generating automatic titles for your stories
      titlePrefix: 'MyComponents',
    },
  ],
};
 
export default config;

當 Storybook 啟動時,它將在 packages/components 目錄中尋找任何包含 stories 擴充功能的檔案,並為您的 stories 產生標題。

使用目錄

您也可以簡化您的 Storybook 設定,並使用目錄載入 stories。例如,如果您想載入 packages/MyStories 內的所有 stories,您可以將設定調整如下

.storybook/main.ts
// Replace your-framework with the framework you are using (e.g., react-webpack5, vue3-vite)
import type { StorybookConfig } from '@storybook/your-framework';
 
const config: StorybookConfig = {
  framework: '@storybook/your-framework',
  // 👇 Storybook will load all existing stories within the MyStories folder
  stories: ['../packages/MyStories'],
};
 
export default config;

使用自訂實作

您也可以調整您的 Storybook 設定並實作自訂邏輯來載入您的 stories。例如,假設您正在處理一個專案,其中包含傳統的 stories 載入方式無法解決的特定模式。在這種情況下,您可以將您的設定調整如下

.storybook/main.ts
// Replace your-framework with the framework you are using (e.g., react-webpack5, vue3-vite)
import type { StorybookConfig } from '@storybook/your-framework';
import type { StoriesEntry } from '@storybook/types';
 
async function findStories(): Promise<StoriesEntry[]> {
  // your custom logic returns a list of files
}
 
const config: StorybookConfig = {
  framework: '@storybook/your-framework',
  stories: async (list: StoriesEntry[]) => [
    ...list,
    // 👇 Add your found stories to the existing list of story files
    ...(await findStories()),
  ],
};
 
export default config;

已知限制

由於目前 stories 在 Storybook 中的索引方式,按需載入 stories 目前有一些小限制

  • 支援從版本 1 到版本 3 的 CSF 格式。
  • 允許基於受限 API 的自訂 storySort 函式。

設定 story 渲染

若要控制 stories 的渲染方式並新增全域 decoratorsparameters,請建立 .storybook/preview.js 檔案。這會在 Canvas UI 中載入,即「預覽」iframe,用於隔離渲染您的元件。對於適用於所有 stories 的全域程式碼 (例如 CSS 導入或 JavaScript 模擬),請使用 preview.js

preview.js 檔案可以是 ES 模組,並匯出以下鍵

如果您想要變更 stories 的排序方式,請閱讀關於 stories 排序的內容。

設定 Storybook 的 UI

若要控制 Storybook UI (即「管理員」) 的行為,您可以建立 .storybook/manager.js 檔案。

此檔案沒有特定的 API,但可以用於設定 UI 選項 和設定 Storybook 的 主題