如何让 Emotion/Rollup/Typescript 组件 CSS 出现在消费 React 应用程序中?

How to get Emotion/Rollup/Typescript component CSS to show up in consuming React app?

我正在使用 TypeScript/Emotion/Rollup/Storybook 构建一个组件库,供 React 应用程序使用。几个序言点:

  1. consuming React 应用程序 运行良好,我可以在该应用程序中创建 Emotion 风格的组件,它运行良好 CSS 样式应用于应用程序自己的组件。

  2. 组件库工作正常,我可以创建 Emotion 风格的组件,打开 Storybook,并查看应用的所有 CSS 样式在 Storybook 的库组件中。

但是,当我将组件从我的组件库 带入我的消费应用程序 时,它们的样式消失了,经过检查,元素看起来像这样:

<button data-testid="Button" css="You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop).">Submit</button>

换句话说,在组件库中创建的组件的 CSS 没有显示出来。同样的元素在库的 Storybook 中很好

作为附加说明,我最初在消费应用程序的 OWN 组件中看到了相同的错误,并按照此处所述使用 Babel 预设解决了它:https://emotion.sh/docs/css-prop

我偶然发现了这个 question/answer,这让我相信我现在遇到的错误是因为 Rollup 不是 运行 通过 Babel 构建的:https://spectrum.chat/emotion/help/solved-css-prop-styles-not-appearing-in-built-components~cb6e75b8-7356-42d0-860b-bb01a26a3d06

经过反复试验,我得到了要使用 Babel 构建的组件库。但是错误一如既往地存在,并且组件在使用中的应用程序中使用时,在 CSS prop.

关于如何让组件的 CSS 显示在消费 React 应用程序中的任何想法?

在此先感谢您的帮助!

确保您的 .tsconfig.jsoncompilerOptions.target: 'es6'compilerOptions.jsx: "preserve"

你的 .babelrc 应该有:

  "presets": [
    "@babel/preset-react",
    "@emotion/babel-preset-css-prop"
  ],