【发布时间】:2020-02-27 12:58:30
【问题描述】:
我想在我的 CRA 项目中使用 Typescript 使用构建在 AntDesign 组件之上的组件来设置 Storybook。
CRA - v3 故事书 - v5.25 AntDesign - v3.23.2
我成功设置了 CRA + AntDesign,设置了 Storybook,我的 AntDesign 组件在 Storybook 中使用 AntD css 类进行渲染,但样式缺失
我试过了
- 在 .stories 文件夹中创建一个 webpack.config.js 文件并使用来自Storybook doesn't understand import on demand for antd components 和https://github.com/storybookjs/storybook/issues/3949/ 的配置
- 创建一个 .babelrc 文件并在那里导入 babel import 和 ant
- 使用与 Advanced AntD 文档中描述的相同配置:https://ant.design/docs/react/use-with-create-react-app
这些方法都不允许我使用样式来渲染 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>
);
});
// 运行故事书会显示: outcome of running storybook
我希望在我的故事书中呈现基于 AntD 的组件,就像在我的 CRA 项目中一样: outcome of running CRA based project
【问题讨论】:
标签: typescript create-react-app antd storybook