源链接

在工具栏中提供故事源链接

在 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 添加到你的插件数组中

示例

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 参数
或者同时定义 sourceLinkPrefixsourceLink 参数,如下所示

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 链接
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 故事中的 sourceLinkPrefix 故事中的 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 故事中的 sourceLinkPrefix 故事中的 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 故事中的 sourceLinkPrefix 故事中的 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"

  • jonathansirrine
    jonathansirrine
使用
    React
标签