create-react-app: SVGR generates invalid react component
Describe the bug
I’ve just upgraded to react-scripts 5.0
but my simple import of a Logo svg fails with the error:
ERROR in ./src/components/layout/logo.svg
Module build failed (from ./node_modules/@svgr/webpack/lib/index.js):
SyntaxError: unknown: Namespace tags are not supported by default. React's JSX doesn't support namespace tags. You can set `throwIfNamespace: false` to bypass this warning.
I wasn’t even planning to use the module and instead just use an img
tag with the SVG as source (similar to what the sample application does).
Did you try recovering your dependencies?
This does not seem to be a dependency issue.
Which terms did you search for in User Guide?
I’ve tried to search for SVG, files as well as creating a new getting started to compare the projects. The only thing I can see is that the sample SVG is a lot simpler then the Logo I am trying to use.
Environment
Environment Info:
current version of create-react-app: 5.0.0
running from C:\Users\fkrauthan\AppData\Local\Yarn\Data\global\node_modules\create-react-app
System:
OS: Windows 10 10.0.19043
CPU: (16) x64 AMD Ryzen 7 3700X 8-Core Processor
Binaries:
Node: 17.2.0 - C:\Program Files\nodejs\node.EXE
Yarn: 1.22.15 - C:\Program Files (x86)\Yarn\bin\yarn.CMD
npm: 8.1.4 - C:\Program Files\nodejs\npm.CMD
Browsers:
Chrome: 96.0.4664.93
Edge: Spartan (44.19041.1266.0), Chromium (96.0.1054.53)
Internet Explorer: 11.0.19041.1202
npmPackages:
react: ^17.0.2 => 17.0.2
react-dom: ^17.0.2 => 17.0.2
react-scripts: 5.0.0 => 5.0.0
npmGlobalPackages:
create-react-app: Not Found
Steps to reproduce
- Create a new react application
- Replace the logo.svg with the content of a complex file (e.g. masthead.svg)
- Try to run
yarn run start
ornpm run start
Expected behavior
Ether a way that I can disable the component generation (in case I don’t need it) or a valid component that actually compiles with the react-scripts provided build setup/
Actual behavior
Code is not compiling as soon as I import the SVG with the error:
ERROR in ./src/components/layout/logo.svg
Module build failed (from ./node_modules/@svgr/webpack/lib/index.js):
SyntaxError: unknown: Namespace tags are not supported by default. React's JSX doesn't support namespace tags. You can set `throwIfNamespace: false` to bypass this warning.
Reproducible demo
The setup to reproduce is pretty simple. See above for instructions. But here is a project as well test_app.zip
About this issue
- Original URL
- State: open
- Created 3 years ago
- Reactions: 19
- Comments: 25
I got same issue.
I used xmlnsXlink to replace xmlns:xlink, which works on some svg files. My final solution is that I minify svg files. You can try it on https://www.svgminify.com/ .
same here, I would rather see a different fix than modifying all the svg-s after they get updated again ang again.
Hi everybody. I have same problem . after search and debug i use this method and my problem solved : I convert my svg file to png and reconvert from png to svg and upgrade react-scripts to 5.0.1 ( react project )
@fkrauthan and everyone else here, i too got this error but then found my SVG file was corrupted after setting up eslint, found there was one semicolon that got added in SVG file content. After removing it, the error got resolved.
same here, I import a svg and use it as a source to img, started getting this error after trying to upgrade to cra 5.
Looks like there are a few open PR that could resolve this issue https://github.com/facebook/create-react-app/issues/12146, https://github.com/facebook/create-react-app/pull/12026, https://github.com/facebook/create-react-app/pull/11780, https://github.com/facebook/create-react-app/pull/12172
@damozhang I’ve tried using that but seems like that SVG file in particular still contains namespaces that trigger that error even after using that website to minify. And in general I shouldn’t have todo that in first place. I feel like there is some configuration wrong/missing.
Yeah but kinda defeats the purpose of using SVG in first place.
I also don’t think its some illegal character as SVG programs can show it. And re-exporting through Inkscape yielded the same result.
thanks. this helped me
Converting your jpg or png file to SVG would solve this problem.
use xmlnsSvg instead of xmlns:svg in the svg file.
My file is definitely not corrupted as it works fine in inkscape and online tools. Plus the older version can without any issues display it.
I find a similar issue on stackoverflow I didn’t minify my svg file but in my case, i changed
xmlns:bx
toxmlnsBx
andbx:shape
tobxShape
into my svg code file. Now, it works for me