React 样式的组件在生产中导致构建错误,但在开发中运行良好

Posted

技术标签:

【中文标题】React 样式的组件在生产中导致构建错误,但在开发中运行良好【英文标题】:React styled component causes build error in production, but runs fine in development 【发布时间】:2019-08-08 15:29:01 【问题描述】:

我的代码有一个奇怪的问题,我有一个样式化的组件 div,它围绕着另一个组件,如下所示:

<ContentWidget>
  <BookDay />
</ContentWidget>

(Bookday 返回一个空的 div,所以这应该不是问题)

我的样式组件 ContentWidget 是一个空的样式组件 div,声明如下:

const ContentWidget = styled.div``;

奇怪的是,我有更多的 contentwidgets 填充了我的 webapp 中加载其他组件的内容。所有导入都很好,因为它在开发中工作得非常好。但是每当我运行 npm run build 时,我都会在控制台中收到以下错误消息。

./app/containers/Dashboard/Dashboard.js 中的错误 41:18 模块解析 失败:意外的关键字 'var' (41:18) 您可能需要一个合适的 loader 来处理这种文件类型。 |从导入 ForegroundBlob “基本组件/ForegroundBlob/ForegroundBlob”; |进口 ForegroundBlobWrapper 来自 "basicComponents/ForegroundBlob/ForegroundBlobWrapper";

导入 BookDay, var _ref = | /#/ | _jsx(ContentWidget, , void 0, _jsx(BookDay, )); 来自“组件/BookDay/BookDay”; @ ./app/containers/PracticePage/PracticePage.js 40:0-55 58:5-14 @ ./app/containers/PracticePage/Loadable.js @ ./app/containers/App/App.js @ ./app/app.js @ 多 ./node_modules/react-app-polyfill/ie11.js ./app/app.js

我发现,每当我使用标准 div 标签更改标签时,它似乎都按照应有的方式构建。我从来没有像现在这样困惑过。

【问题讨论】:

您能展示一下您对 BookDay 的实现吗? 【参考方案1】:

我收到了这个错误:

模块解析失败:意外的关键字 'var' (13:23) 您可能需要一个 适当的加载器来处理这种文件类型。

我不清楚确切的原因,但是将我正在使用的样式化组件移动到我正在使用它们的文件中,而不是从不同的文件中导入它们,解决了这个问题。事实上,"@babel/plugin-transform-react-constant-elements" 如何处理styled-components 似乎确实存在某种问题;可能需要对循环依赖做一些事情。

【讨论】:

【参考方案2】:

好的,经过一点调试,我发现了自己。

"@babel/plugin-transform-react-constant-elements", babel 插件似乎与样式化组件混淆了。

【讨论】:

可能晚了,这里有什么解决办法? 我没有找到除了删除插件之外的其他解决方案,因为我自己不需要它。 谢谢。也为我工作。但我不确定对我的项目的影响。 ? 对我来说幸运的是它没有(任何)后果,所以希望对你来说也是如此。

以上是关于React 样式的组件在生产中导致构建错误,但在开发中运行良好的主要内容,如果未能解决你的问题,请参考以下文章

同一组件中的不同样式,仅在 gatsby 构建版本中

React + Webpack + Material UI 样式在生产中中断

生产构建后忽略组件样式

为啥我在使用 create-react-app 的生产构建中丢失了 Bootstrap 样式?

Gatsby 构建/s-s-r 换出导致显示错误的组件

如何在 React App 中排除全局样式?