diff --git a/README.md b/README.md
index ceb93f156b5..52fcde08fa9 100644
--- a/README.md
+++ b/README.md
@@ -65,3 +65,12 @@ Importing any stylesheet from JS (with CSS Modules enabled) will convert class n
@import '~react-select/dist/react-select';
}
```
+#### 5. SVG as JSX, is it even possible?
+Importing SVGs as JSX is possible, but only SVGs suffixed with `.inline` will be treated as JSX code:
+```
+import logo from './logo.svg';
+import LogoInline from './logo.inline.svg';
+
+
+
+```
diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js
index 6ea66cdc3a2..56d07eb9fd5 100644
--- a/packages/react-scripts/config/webpack.config.dev.js
+++ b/packages/react-scripts/config/webpack.config.dev.js
@@ -175,8 +175,8 @@ module.exports = {
// directory for faster rebuilds.
cacheDirectory: true,
},
- }
- ]
+ },
+ ],
},
// "postcss" loader applies autoprefixer to our CSS.
// "css" loader resolves paths in CSS and adds assets as dependencies.
@@ -191,7 +191,9 @@ module.exports = {
loader: require.resolve('css-loader'),
options: {
importLoaders: 2,
- modules: process.env.CSS_MODULES ? process.env.CSS_MODULES == 'true' : true,
+ modules: process.env.CSS_MODULES
+ ? process.env.CSS_MODULES == 'true'
+ : true,
camelCase: true,
localIdentName: '[path][name]__[local]--[hash:base64:5]',
},
@@ -226,6 +228,12 @@ module.exports = {
test: /\.md$/,
loader: require.resolve('raw-loader'),
},
+ // This loader allows to parse SVG as JSX
+ {
+ test: /\.inline\.svg$/,
+ exclude: /node_modules/,
+ loader: 'svg-react-loader',
+ },
// "file" loader makes sure those assets get served by WebpackDevServer.
// When you `import` an asset, you get its (virtual) filename.
// In production, they would get copied to the `build` folder.
diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js
index 286a8c0b542..9e59dc3deae 100644
--- a/packages/react-scripts/config/webpack.config.prod.js
+++ b/packages/react-scripts/config/webpack.config.prod.js
@@ -206,9 +206,12 @@ module.exports = {
importLoaders: 2,
minimize: true,
sourceMap: shouldUseSourceMap,
- modules: process.env.CSS_MODULES ? process.env.CSS_MODULES == 'true' : true,
+ modules: process.env.CSS_MODULES
+ ? process.env.CSS_MODULES == 'true'
+ : true,
camelCase: true,
- localIdentName: '[path][name]__[local]--[hash:base64:5]',
+ localIdentName:
+ '[path][name]__[local]--[hash:base64:5]',
},
},
{
@@ -249,6 +252,12 @@ module.exports = {
test: /\.md$/,
loader: require.resolve('raw-loader'),
},
+ // This loader allows to parse SVG as JSX
+ {
+ test: /\.inline\.svg$/,
+ exclude: /node_modules/,
+ loader: 'svg-react-loader',
+ },
// "file" loader makes sure assets end up in the `build` folder.
// When you `import` an asset, you get its filename.
// This loader doesn't use a "test" so it will catch all modules
diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json
index 13f187726e7..41ea43605b1 100644
--- a/packages/react-scripts/package.json
+++ b/packages/react-scripts/package.json
@@ -65,6 +65,7 @@
"raw-loader": "^0.5.1",
"react-dev-utils": "^5.0.0",
"style-loader": "0.19.0",
+ "svg-react-loader": "0.4.5",
"sw-precache-webpack-plugin": "0.11.4",
"url-loader": "0.6.2",
"webpack": "3.8.1",
diff --git a/packages/react-scripts/template/src/components/App/index.js b/packages/react-scripts/template/src/components/App/index.js
index f90048a69f8..3f970e13397 100644
--- a/packages/react-scripts/template/src/components/App/index.js
+++ b/packages/react-scripts/template/src/components/App/index.js
@@ -1,11 +1,12 @@
import React, { Component } from 'react';
import logo from './logo.svg';
+import LogoInline from './logo.inline.svg';
import styles from './style.scss';
class App extends Component {
state = {
count: 0,
- }
+ };
componentDidMount() {
setInterval(this.increment, 1000);
@@ -19,17 +20,21 @@ class App extends Component {
this.setState(prevState => ({
count: prevState.count + 1,
}));
- }
+ };
render() {
return (
+
- Welcome to React | Count: {this.state.count}
+
+ Welcome to React | Count: {this.state.count}
+
- To get started, edit src/components/App/index.js
and save to reload.
+ To get started, edit src/components/App/index.js
and save
+ to reload.
);
diff --git a/packages/react-scripts/template/src/components/App/logo.inline.svg b/packages/react-scripts/template/src/components/App/logo.inline.svg
new file mode 100644
index 00000000000..2fa6f69a1c0
--- /dev/null
+++ b/packages/react-scripts/template/src/components/App/logo.inline.svg
@@ -0,0 +1,7 @@
+