svgr icon indicating copy to clipboard operation
svgr copied to clipboard

system-wide svgo.config.js overrides default svgr one

Open maxencelaurent opened this issue 3 years ago • 2 comments

🐛 Bug Report

If a global svgo.config.js is defined (eg. in home directory), svgr may fail to load some SVGs.

To Reproduce

Load SVGs with "@svgr/webpack" loader. Do not define any parameters.

      {
        test: /\.svg$/,
        use: ['@svgr/webpack'],
      }

Create a dummy svgo.config.js file in your home: (~/svgo.config.js)

module.exports = {
  plugins: [],
};

Create an SVG with some namespaces defined:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   width="210mm"
   height="297mm"
   viewBox="0 0 210 297"
   version="1.1"
   id="svg5"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:svg="http://www.w3.org/2000/svg">
  <g>            
    <rect style="fill:#00ff00;stroke-width:2"                                                                        
       width="9.4238062"
       height="9.0213614"
       x="7.242053"
       y="5.5198383" />
  </g>
</svg>

Import it in your code:

import MySvg from `theFile.svg`;
run webpack.

As the global svgo config defines no plugins, the SVG is not sanitized and still contains xmlns:svg attribute. Such a svg will be rejected by @babel/plugin-transform-react-jsx.

Expected behavior

SVGR should ignore the global svgo config.

Link to repl or repo

Setup repo

git clone https://github.com/maxencelaurent/SvgrSvgo.git
cd SvgrSvgo
yarn install

Build without global config is fine:

yarn webpack --mode production

Create the global config and re-build:

echo "module.exports = { plugins: [ ], };" > ~/svgo.config.js
yarn webpack --mode production

Output:

ERROR in ./src/pictures/rect.svg
Module build failed (from ./node_modules/@svgr/webpack/dist/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.
[...]

Run npx envinfo --system --binaries --npmPackages @svgr/core,@svgr/cli,@svgr/webpack,@svgr/rollup --markdown --clipboard

*** Clipboard option removed - use clipboardy or clipboard-cli directly ***


## System:
 - OS: Linux 5.15 Ubuntu 22.04 LTS 22.04 LTS (Jammy Jellyfish)
 - CPU: (8) x64 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
 - Memory: 13.77 GB / 46.78 GB
 - Container: Yes
 - Shell: 5.8.1 - /usr/bin/zsh
## Binaries:
 - Node: 16.13.0 - /usr/local/bin/node
 - Yarn: 1.22.10 - /usr/local/bin/yarn
 - npm: 8.1.0 - /usr/local/bin/npm
## npmPackages:
 - @svgr/webpack: ^6.2.1 => 6.2.1 

maxencelaurent avatar May 24 '22 12:05 maxencelaurent

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

stale[bot] avatar Oct 01 '22 07:10 stale[bot]

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

stale[bot] avatar May 21 '23 19:05 stale[bot]