原始碼連結

在工具列中提供指向 Story 原始碼的連結

在 Github 上檢視

Storybook npm npm npm npm npm
npms.io (final) npms.io (quality) npms.io (maintenance) npms.io (popularity)
Snyk Vulnerabilities for npm package Libraries.io dependency status for latest release Libraries.io SourceRank

在工具列中提供指向 Story 原始碼的連結。

npm install storybook-source-link

storybook-source-code 加入 .storybook/main.js|ts 中 config 物件的 addons 陣列。

範例

import type { StorybookConfig } from "@storybook/nextjs";

const config: StorybookConfig = {
  stories: [
    "../stories/**/*.mdx",
    "../stories/**/*.stories.@(js|jsx|mjs|ts|tsx)",
  ],
  addons: [
    "@storybook/addon-links",
    "@storybook/addon-essentials",
    "@storybook/addon-onboarding",
    "@storybook/addon-interactions",
    "storybook-source-link" // <-- add it here
  ],
  framework: {
    name: "@storybook/nextjs",
    options: {},
  },
  docs: {
    autodocs: "tag",
  },
};

export default config;

Screen Shot 2022-03-23 at 1 15 50 PM

定義一個 sourceLink 參數,或一個 sourceLinkPrefix 參數,可以全域定義、在元件層級定義,或在 Story 層級定義。請參閱參數繼承規則。這允許您控制每個 Story 的連結生成方式。

以下是控制連結如何產生的相關程式碼

  const getLink = (prefix: string | undefined, link: string | undefined) => {
    if (!link) return null;
    if (prefix) link = `${prefix}${link}`
    return link
  }

請參閱完整原始碼,瞭解其渲染方式。

您可以在 .storybook/preview.js 檔案中設定全域參數,以定義預設連結,如下所示

export const parameters = {
  sourceLink: '<link to source>'
  sourceLinkPrefix: '<prefix to link>'
}

一些範例可能如下所示

export const parameters = {
  // each story will link here, unless specified otherwise in either the component, or the story
  sourceLink: 'https://github.com/Sirrine-Jonathan/storybook-source-link/',
}
export const parameters = {
  // stories will link to https://github.com/Sirrine-Jonathan/storybook-source-link
  sourceLink: 'storybook-source-link/',
  sourceLinkPrefix: 'https://github.com/Sirrine-Jonathan/'
  // the sourceLinkPrefix here allows us to define sourceLinks at the component and story level
  // that use the same prefix 
}
export const parameters = {
  // stories with a `sourceLink` parameter defined at the story or component level will use this as a prefix,
  // unless a different prefix is defined at the component or story level as well
  sourceLinkPrefix: 'https://github.com/Sirrine-Jonathan/storybook-source-link/blob/main/stories/'
  // no sourceLink parameter is defined here, so any story missing a sourceLink parameter will have no link
  // unless a link is specified at the component level
}

為了更精細的調整,您可以在每個元件內定義相同的參數,用於元件內的所有 Story。

*.stories.js

export default {
  title: 'Example',
  component: Button,
  parameters: {
    sourceLink: '<link to source>'
    sourceLinkPrefix: '<prefix to link>'
  }
};

一個範例可以是

export default {
  title: 'Example',
  component: Button,
  parameters: {
    sourceLink: 'https://github.com/Sirrine-Jonathan/storybook-source-link/blob/main/stories/Button.js',
    sourceLinkPrefix: '' // pass an empty string to disable the prefix set globally for stories for this component
  }
};

在元件層級定義的參數會覆蓋在 .storybook/preview.js 檔案中定義的全域參數。

這可以在 Story 層級完成,以覆蓋全域設定和元件層級設定。

對於每個需要更具體處理的 Story,請在每個 *.stories.js 檔案中定義一個 sourceLink 參數
或同時定義 sourceLinkPrefixsourceLink 參數,如下所示

export const PrimaryStory = () => (
  <Button>Primary</Button>
);
PrimaryStory.parameters = {
  sourceLink: '<link to source>'
  sourceLinkPrefix: '<prefix to link>'
};

下表旨在幫助您瞭解點擊圖示時會發生的情況。

請記住,某些可能的配置可能會導致產生非預期的連結。
例如,如果在 Story 上設定了 sourceLinkPrefix 參數,但沒有設定 sourceLink 參數,則 Story 上設定的前綴將與層級結構中向上定義的下一個 sourceLink 參數一起使用。您最終可能會得到一個沒有意義的連結。

幾乎總是這樣,您希望在元件或 Story 層級設定 sourceLinkPrefix 的任何地方都設定 sourceLink 參數。

✅   sourceLinkPrefix
✅   sourceLink

export const parameters = {
  // .storybook/preview.js
  sourceLink: '<link to source>'
  sourceLinkPrefix: '<prefix to link>'
}
元件中的 sourceLinkPrefix 元件中的 sourceLink Story 中的 sourceLinkPrefix Story 中的 sourceLink 連結
story-prefix:story-link
story-prefix:component-link
component-prefix:story-link
component-prefix:component-link
story-prefix:story-link
story-prefix:preview-link
component-prefix:story-link
component-prefix:preview-link
story-prefix:story-link
story-prefix:component-link
preview-prefix:story-link
preview-prefix:component-link
story-prefix:story-link
story-prefix:preview-link
preview-prefix:story-link
preview-prefix:preview-link

✅   sourceLinkPrefix
❌   sourceLink

export const parameters = {
  // .storybook/preview.js
  sourceLink: '<link to source>'
}
元件中的 sourceLinkPrefix 元件中的 sourceLink Story 中的 sourceLinkPrefix Story 中的 sourceLink 連結
story-prefix:story-link
story-prefix:component-link
component-prefix:story-link
component-prefix:component-link
story-prefix:story-link
連結到資訊
component-prefix:story-link
連結到資訊
story-prefix:story-link
story-prefix:component-link
preview-prefix:story-link
連結到資訊
story-prefix:story-link
連結到資訊
preview-prefix:story-link
連結到資訊

❌   sourceLinkPrefix
✅   sourceLink

export const parameters = {
  // .storybook/preview.js
  sourceLinkPrefix: '<prefix to link>'
}
元件中的 sourceLinkPrefix 元件中的 sourceLink Story 中的 sourceLinkPrefix Story 中的 sourceLink 連結
story-prefix:story-link
story-prefix:component-link
component-prefix:story-link
component-prefix:component-link
story-prefix:story-link
story-prefix:component-link
component-prefix:story-link
component-prefix:preview-link
story-prefix:story-link
story-prefix:component-link
story-link
component-link
story-prefix:story-link
story-prefix:preview-link
story-link
preview-link

❌   sourceLinkPrefix
❌   sourceLink

export const parameters = {
  // .storybook/preview.js
}
元件中的 sourceLinkPrefix 元件中的 sourceLink Story 中的 sourceLinkPrefix Story 中的 sourceLink 連結
story-prefix:story-link
story-prefix:component-link
component-prefix:story-link
component-prefix:component-link
story-prefix:story-link
連結到資訊
component-prefix:story-link
連結到資訊
story-prefix:story-link
story-prefix:component-link
story-link
preview-prefix:component-link
story-prefix:story-link
連結到資訊
story-link
連結到資訊

Twitter Follow

"Buy Me A Coffee"