顯示 Vue 元件資訊的 Storybook 擴充套件

在 Github 上檢視

已棄用

由於 官方 addon-info 已停用,此擴充套件已被棄用。

Storybook 現在有一個替代擴充套件,稱為 Docs 擴充套件 (addon-docs),它具有原生的 Vue.js 支援,並由 vue-docgen-api 提供自動的 props/events/slots 文件。

此儲存庫將不會再新增功能或修復錯誤。請改用 Docs 擴充套件。

遷移至 Docs

如上所述,Docs 擴充套件透過 vue-docgen-loader 使用 vue-docgen-api。它們也是 storybook-addon-vue-info 內部使用的工具。因此,遷移步驟相當簡單。

docgen 工具不再是 peerDependencies

由於 Docs 擴充套件將 vue-docgen-apivue-docgen-loader 指定為直接依賴項,因此您不必在 package.json 中列出它們。

 "dependencies": {
-  "vue-docgen-api": "x.x.x",
-  "vue-docgen-loader": "x.x.x"
 }

當然,您可以保留它們以控制要使用的確切版本。

明確指定要記錄文件的元件

您需要在故事中繼資料中設定 component 欄位。

// foo.stories.js
import MyComponent from './my-component.vue'

export default {
  title: 'Components/MyComponent',
  component: MyComponent
}

export const story = () => ({
  components: { MyComponent },
  template: '<my-component/>'
})

summary 移至 JSDoc 註解或 MDX 中

Docs 擴充套件中 summary 選項的等效項是元件註解或 MDX。Docs 擴充套件會讀取元件註解,並將其顯示為元件的描述。

// legacy.stories.js
export const myStory = () => ({
  /* ... */
})

myStory.story = {
  info: {
    summary: 'foo bar'
  }
}
<!-- component -->
<script>
  /**
   * foo bar
   */
  export default {
    /* ... */
  }
</script>

或者,您可以使用 MDX 以進行更複雜的用途。


Build Status npm version Monthly download GitHub license code style: prettier

storybook-addon-vue-info

顯示 Vue 元件資訊的 Storybook 擴充套件。

需求

  • @storybook/vue>=4.0.0

開始使用

首先,安裝擴充套件。

npm install --save-dev storybook-addon-vue-info

# yarn add -D storybook-addon-vue-info

然後在 addons.js 中註冊。

// .storybook/addons.js

// Don't forget "/lib/" !!
import 'storybook-addon-vue-info/lib/register'

並設定 webpack loader,以便使用 vue-docgen-api 提取元件資訊。

npm install --save-dev vue-docgen-loader vue-docgen-api

# yarn add -D vue-docgen-loader vue-docgen-api
// .storybook/webpack.config.js

// This example uses "Full control mode + default".
// If you are using other mode, add payload of `config.module.rules.push` to rules list.
module.exports = ({ config }) => {
  config.module.rules.push({
    test: /\.vue$/,
    loader: 'vue-docgen-loader',
    enforce: 'post'
  })

  return config
}

用法

新增 withInfo 裝飾器,然後將 info 選項設定到故事中。

注意:擴充套件需要 info 選項。如果您省略它,擴充套件將不會執行任何動作。

import { storiesOf } from '@storybook/vue'

import { withInfo } from 'storybook-addon-vue-info'

storiesOf('MyComponent', module)
  .addDecorator(withInfo)
  .add(
    'foo',
    () => ({
      components: { MyAwesomeComponent },
      template: '<my-awesome-component/>'
    }),
    {
      info: {
        summary: 'Summary for MyComponent'
      }
    }
  )

您可以將擴充套件設定為全域裝飾器。

// config.js
import { addDecorator } from '@storybook/vue'

import { withInfo } from 'storybook-addon-vue-info'

addDecorator(withInfo)

若要設定預設選項,請使用 setDefaults

// .storybook/config.js
import { setDefaults } from 'storybook-addon-vue-info'

setDefaults({
  header: false
})

如需更多詳細資訊,請參閱即時範例

選項

名稱 資料類型 預設值 描述
header boolean true 是否顯示標頭。
source boolean true 是否顯示原始碼(用法)。
wrapperComponent 元件 預設包裝器 覆寫內嵌文件元件。
previewClassName string undefined 傳遞至預覽容器的類別名稱。
previewStyle 樣式物件 undefined 傳遞至預覽容器的樣式。
summary string '' 故事的摘要。接受 Markdown。
components { [name: string]: Component }|null null 顯示這些元件的資訊。與元件的 components 屬性類型相同。
docsInPanel boolean true 是否在擴充套件面板中顯示文件。
useDocgen boolean true 是否使用 vue-docgen-api 的結果。
casing "kebab" | "camel" | "pascal" | undefined undefined 要使用哪種大小寫。有關詳細用法,請參閱下文。

有效的 casing 選項

{
  // Don't convert names
  casing: undefined
}

{
  // Show names in kebab-case
  casing 'kebab'
}

{
  // Show prop names in camelCase and
  // Show component names in PascalCase
  casing: 'camel' // or 'pascal'
}

{
  // Show prop names in camelCase and
  // Show component names in kebab-case
  casing: {
    props: 'camel',
    component: 'kebab'
  }
}

除了擴充套件選項外,我們還有一個元件選項。

手動設定描述

透過 vue-docgen-api,擴充套件會自動顯示由 docgen 提取的描述和類型 (請參閱 vue-docgen-api README 中的範例)。但是,如果您想為元件的 props、events 或 slots 明確指定描述,請為您的故事元件新增 description 選項。

假設 <my-awesome-component> 具有 props labelvisible

storiesOf('MyComponent', module)
  .addDecorator(withInfo)
  .add(
    'foo',
    () => ({
      components: { MyAwesomeComponent },
      template: '<my-awesome-component/>',
      description: {
        MyAwesomeComponent: {
          props: {
            // These description will appear in `description` column in props table
            label: 'A label for my awesome component',
            visible: 'Whether component is visible or not'
          },
          events: {
            click: 'Event for user clicking the component'
          },
          slots: {
            default: 'Place text or icon here'
          }
        }
      }
    }),
    {
      info: true
    }
  )

如需更多詳細資訊,請參閱即時範例

範例

如需實際範例,請參閱 example 目錄。

由以下人員製作
  • pocka
    pocka
標籤