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'; + +logo + +``` 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 (
+ logo -

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 @@ + + + + + + +