用于单仓的 Storybook 包购物车的插件

在 Github 上查看

storybook-addon-package-shopping-cart

一个 Storybook 插件,用于协助安装多包项目。

注意:此插件与 Microsoft 或 Fluent UI 没有任何关联。下面演示中选择了 Fluent UI,因为它是一个成熟的单仓,包含单独打包的组件,因此可以很好地展示此插件的功能。

Example

用法

使用以下命令安装


npm install -D storybook-addon-package-shopping-cart

将以下内容添加到你的 .storybook/main.js 文件中


module.exports = {
  ...,
  addons: [
    ...,
    "storybook-addon-package-shopping-cart"
  ]
};

包上下文确定

此插件通过目录结构确定当前包。最近的父级 package.json 用于当前活动的包。

任何没有版本字段或具有 private: true 的包都将被此插件忽略。

主题配置

默认情况下,此插件中的组件使用内置的 Storybook 主题颜色值,但你也可以通过提供自定义 Storybook 主题来自定义它们。

// .storybook/manager.js
import { addons } from '@storybook/addons';
import { create } from '@storybook/theming';

const theme = create({
    base: 'dark',
    appContentBg: 'white',
    brandTitle: 'mono-repo-tools',
    packageShoppingCart: {
      tooltip: {
        /* Default: props.theme.background.app */
        backgroundColor: 'blue',
        /* Default: props.theme.color.defaultText */
        textColor: 'green'
      }
      shoppingCart: {
        badge: {
          /* Default: props.theme.color.primary */
          bgColor: 'blue',
          /* Default: props.theme.color.defaultText */
          textColor: 'red'
        },
        addButton: {
          /* Default: props.theme.color.positive */
          bgColor: 'blue',
          /* Default: props.theme.color.defaultText */
          textColor: 'green'
        },
        removeButton: {
          /* Default: props.theme.color.negative */
          bgColor: 'green',
          /* Default: props.theme.color.defaultText */
          textColor: 'blue'
        },
        disabledButton: {
          /* Default: props.theme.color.tertiary */
          bgColor: 'green',
          /* Default: props.theme.color.inverseText */
          textColor: 'blue'
        }
      },
      quickAddButton: {
        /* Default: props.theme.color.positive */
        addIconColor: 'blue',
        /* Default: props.theme.color.negative */
        removeIconColor: 'green'
      }
    }
})

addons.setConfig({
  theme
});

配置安装脚本

默认情况下,购物车将配置为安装最新版本的包。你可以通过配置全局 Storybook 参数来配置安装的版本。请参阅以下安装精确版本的示例。

// .storybook/preview.js
export const parameters = {
  packageShoppingCart: {
      determineVersionToInstall: (pkg) => {
        return `${pkg.name}@${pkg.version}`
      }
    }
};

解析 .md 文件

Webpack 5

如果你使用带有 Webpack 5 的 Storybook,则应自动设置 markdown 文件以进行解析。

如果由于某种原因不起作用,你可以按照以下步骤手动将它们配置为源资产

  webpackFinal: (config) => {
    ...
    config.module.rules.push({
      test: /\.md$/,
      type: 'asset/source',
    })
    return config;
  },

Webpack 4

如果你使用带有 Webpack 4 的 Storybook,则需要通过raw-loader配置 markdown 文件进行解析,如下所示。

  webpackFinal: (config) => {
    ...
    config.module.rules.push({
      test: /\.md$/,
      use: 'raw-loader'
    })
    return config;
  },

禁用故事的上下文解析

如果你想为某个故事禁用包上下文加载,可以将 parameters.packageContext=null 传递给组件的故事。


export default: {
  parameters: {
    packageContext: null
  }
}

storybook-package-context-loader 选项

此插件使用storybook-package-context-loader来确定包上下文。默认情况下,enableReadmeenableChangelog 被禁用以最大程度地减少构建大小。如果你想启用它们,可以通过将以下内容添加到你的包中,将选项传递给插件。

module.exports = {
  ...,
  addons: [
    ...,
    {
      name: "storybook-addon-package-shopping-cart",
      options: {
        packageContextLoaderOptions: {
          enableReadme: true,
          enableChangelog: true
        }
      }
    }
  ]
};