Компоненты Storybook и AntDesign - как настроить CRA & Typescript? - PullRequest
0 голосов
/ 01 ноября 2019

Я хочу настроить Storybook с компонентами, построенными поверх компонентов AntDesign, в моем проекте CRA с Typescript.

CRA - Сборник рассказов v3 - v5.25 AntDesign - v3.23.2

Мне удается настроить CRA + AntDesign, настроить Storybook, мои компоненты AntDesign отображаются в Storybook с классами AntD css, ноотсутствует стиль

Я пытался

Ни один из подходов не позволяет мне визуализировать компонент AntD со стилем

// .stories /webpack.config.js

const path = require("path");

module.exports = {
  module: {
    rules: [
      {
        loader: "babel-loader",
        exclude: /node_modules/,
        test: /\.js$/,
        options: {
          presets: ["@babel/react"],
          plugins: [["import", { libraryName: "antd", style: true }]]
        }
      },
      {
        test: /\.less$/,
        loaders: [
          "style-loader",
          "css-loader",
          {
            loader: "less-loader",

            options: {
              modifyVars: { "@primary-color": "#d8df19" },
              javascriptEnabled: true
            }
          }
        ],
        include: path.resolve(__dirname, "../")
      }
    ]
  }
};

// .stories / .babelrc

{
  "plugins": [
    [
      "import",
      {
        "libraryName": "antd",
        "style": "css"
      }
    ]
  ]
}

// мой компонент на основе AntDesign

import { Menu } from "antd";
import React, { FC } from "react";
import { RouteComponentProps, withRouter } from "react-router";
import { styled } from "styletron-react";

export const Sidebar: FC<RouteComponentProps> = ({ history }) => {
  const SidebarLayout = styled(Menu, {
    height: "100vh",
    width: "100%"
  });

  return (
    <SidebarLayout
      onSelect={item => {
        history.push(item.key);
      }}
      defaultSelectedKeys={["/"]}
      selectedKeys={[history.location.pathname]}
      mode="inline"
      theme="dark"
    >
      <Menu.Item key="/">Table View</Menu.Item>
      <Menu.Item key="/dashboard">Dashboard</Menu.Item>
    </SidebarLayout>
  );
};

export default withRouter(Sidebar);

// моя история

import { storiesOf } from "@storybook/react";
import { Button } from "antd";
import React from "react";
import { MemoryRouter } from "react-router";
import Sidebar from ".";

storiesOf("Sidebar", module).add("Renders a regular menu", () => {
  return (
    <MemoryRouter initialEntries={["/"]}>
      <Sidebar />
      <Button type="primary">Button</Button>
    </MemoryRouter>
  );
});

// запуск сборника рассказов показывает это: результат запуска сборника рассказов

Я ожидаю, что компонент на основе AntD будет отображаться в моем сборнике рассказов так же, как в моем проекте CRA: результат запуска проекта на основе CRA

1 Ответ

0 голосов
/ 01 ноября 2019

Импорт antd стилей import 'antd/dist/antd.css'; в файле config.js сборника рассказов:

// @ .storybook/config.js 
import { configure } from '@storybook/react';
import 'antd/dist/antd.css';

function loadStories() {
  const req = require.context('stories', true, /\.stories\.js$/);
  req.keys().forEach(filename => req(filename));
}

configure(loadStories, module);

См. Поддержка CSS в storybook документах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...