我正在使用Create React App构建一个组件库.在我的一些组件中,我像这样导入SVG:

import { ReactComponent as IconClear } from 'icons/clear.svg';

这在开发中起作用,因为我知道CRA支持这样的SVG.

我使用@babel/cli将我的src/lib文件夹转换为dist文件夹,以将库用作 node 包:

rm -rf dist && NODE_ENV=production babel src/lib --out-dir dist --copy-files

在生产中,这些SVG组件不起作用.我得到的错误是:

错误:元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件),但GET:UNDEFINED.

我如何使用巴别塔将这些SVG转换成组件?我不想 for each SVG手动创建组件,我想保持SVG标记不变,这样它仍然可以在设计软件中打开.有没有巴别塔预置/插件可以做到这一点?

推荐答案

我能够使用babel-plugin-inline-react-svg套餐完成我所需要的工作.

我只是简单地安装了它: npm install babel-plugin-inline-react-svg --save-dev

然后我在我的babel.config.json里加了plugin分.

"plugins": ["inline-react-svg"]

现在,当我运行我的build脚本时,SVG是内联的.

源代码:

import { ReactComponent as IconClear } from 'icons/clear.svg';

……变成了:

var IconClear = function IconClear(props) {
  return /*#__PURE__*/_react.default.createElement("svg", props, /*#__PURE__*/_react.default.createElement("path", {
    d: "M12.59 0 14 1.41 8.41 7 14 12.59 12.59 14 7 8.41 1.41 14 0 12.59 5.59 7 0 1.41 1.41 0 7 5.59z"
  }));
};

SVG现在可以在生产中正常工作,不会出现任何错误.

Reactjs相关问答推荐

如何在取数后添加新数据,并在页面上保存旧数据?

TypeError:b不是React.js中的函数错误

如何在MUI X数据网格列中显示IMG?

在url中使用MongoDB对象ID被认为是不好的做法?

Github 操作失败:发布 NPM 包

如何在 React Native 中渲染下面的对象数组?

如何优化 React 应用程序的性能?

为 Next.js 应用程序目录中的所有页面添加逻辑的全局文件是什么?

Spring Boot + React + MySQL应用的架构层面有哪些?

React 状态不更新

如何覆盖自定义 MUI 手风琴的样式(分隔线和折叠图标)

ReactJS 动态禁用按钮

基于标记名的博客详细信息分组没有发生

react - 警告:列表中的每个子元素都应该有一个独特的 keys props ,即使我已经设置了 keys

顶点图表甜甜圈项目边框半径

表单错误后 Ionic React 无法 Select 单选按钮

我应该使用 useEffect 来为 React Native Reanimated 的 prop 值变化设置动画吗?

渲染的钩子比预期的少.这可能是由 React Hooks 中意外的提前返回语句引起的

如何定制 React 热 toastr ?

MUI 卡组件上的文本未正确对齐