原始碼連結

在工具列中提供故事原始碼的連結

在 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

在工具列中提供故事原始碼的連結。

npm install storybook-source-link

.storybook/main.js|ts 的設定物件中,將 storybook-source-code 加入您的 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 參數,可以在全域、元件層級和/或故事層級定義。請參閱參數繼承規則。這能讓您控制每個故事的連結產生方式。

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

  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
}

為了更精細的調整,您可以在每個元件內定義相同的參數,供元件內的每個故事使用。

*.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 檔案中定義的全域層級參數。

這可以在故事層級完成,以覆寫全域設定和元件層級設定。

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

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

下表可幫助您了解點擊圖示時的預期結果。

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

通常情況下,您應該在元件或故事層級設定 sourceLinkPrefix 的地方設定 sourceLink 參數。

✅   sourceLinkPrefix
✅   sourceLink

export const parameters = {
  // .storybook/preview.js
  sourceLink: '<link to source>'
  sourceLinkPrefix: '<prefix to link>'
}
元件中的 sourceLinkPrefix 元件中的 sourceLink 故事中的 sourceLinkPrefix 故事中的 sourceLink 連結
故事前綴:故事連結
故事前綴:元件連結
元件前綴:故事連結
元件前綴:元件連結
故事前綴:故事連結
故事前綴:預覽連結
元件前綴:故事連結
元件前綴:預覽連結
故事前綴:故事連結
故事前綴:元件連結
預覽前綴:故事連結
預覽前綴:元件連結
故事前綴:故事連結
故事前綴:預覽連結
預覽前綴:故事連結
預覽前綴:預覽連結

✅   sourceLinkPrefix
❌   sourceLink

export const parameters = {
  // .storybook/preview.js
  sourceLink: '<link to source>'
}
元件中的 sourceLinkPrefix 元件中的 sourceLink 故事中的 sourceLinkPrefix 故事中的 sourceLink 連結
故事前綴:故事連結
故事前綴:元件連結
元件前綴:故事連結
元件前綴:元件連結
故事前綴:故事連結
連結到資訊
元件前綴:故事連結
連結到資訊
故事前綴:故事連結
故事前綴:元件連結
預覽前綴:故事連結
連結到資訊
故事前綴:故事連結
連結到資訊
預覽前綴:故事連結
連結到資訊

❌   sourceLinkPrefix
✅   sourceLink

export const parameters = {
  // .storybook/preview.js
  sourceLinkPrefix: '<prefix to link>'
}
元件中的 sourceLinkPrefix 元件中的 sourceLink 故事中的 sourceLinkPrefix 故事中的 sourceLink 連結
故事前綴:故事連結
故事前綴:元件連結
元件前綴:故事連結
元件前綴:元件連結
故事前綴:故事連結
故事前綴:元件連結
元件前綴:故事連結
元件前綴:預覽連結
故事前綴:故事連結
故事前綴:元件連結
故事連結
元件連結
故事前綴:故事連結
故事前綴:預覽連結
故事連結
預覽連結

❌   sourceLinkPrefix
❌   sourceLink

export const parameters = {
  // .storybook/preview.js
}
元件中的 sourceLinkPrefix 元件中的 sourceLink 故事中的 sourceLinkPrefix 故事中的 sourceLink 連結
故事前綴:故事連結
故事前綴:元件連結
元件前綴:故事連結
元件前綴:元件連結
故事前綴:故事連結
連結到資訊
元件前綴:故事連結
連結到資訊
故事前綴:故事連結
故事前綴:元件連結
故事連結
預覽前綴:元件連結
故事前綴:故事連結
連結到資訊
故事連結
連結到資訊

Twitter Follow

"Buy Me A Coffee"