Blog, COLDSURF

Configure React with Webpack (react & pwa & webpack)

#react

#pwa

#webpack

Configure React with Webpack

1. Add modules

  • create src directory
  • create public directory
  • add modules for es6
yarn add -D @babel/core @babel/preset-env @babel/preset-react

2. Install webpack modules

yarn add -D webpack webpack-cli webpack-dev-server babel-loader css-loader style-loader html-webpack-plugin

3. webpack.config.js

webpack.config.js
const path = require('path') const HtmlWebpackPlugin = require('html-webpack-plugin') const htmlPlugin = new HtmlWebpackPlugin({ template: './public/index.html', filename: './index.html', }) const config = mode => { const isDevelopMode = mode === 'development' return { entry: './src/index.js', output: { path: path.join(__dirname, '/build'), filename: 'index.bundle.js', }, module: { rules: [ { test: /\\.(js|jsx)$/, exclude: /node_modules/, use: { loader: 'babel-loader', }, }, { test: /\\.(css)$/, use: [ { loader: 'style-loader', }, { loader: 'css-loader', options: { modules: { localIdentName: isDevelopMode ? '[path][name]__[local]--[hash:base64:5]' : '[name]__[local]--[hash:base64:5]', }, importLoaders: 1, sourceMap: true, }, }, ], }, ], }, plugins: [htmlPlugin], } } module.exports = (env, argv) => { const { mode } = argv return config(mode) }

4. Add index.html in public directory

index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>React PWA Webpack</title> </head> <body> <div id="root"></div> </body> </html>

5. Configure Babel

.babelrc
{ "presets": ["@babel/env", "@babel/react"] }

6. Install React

yarn add react react-dom

7. Create src/index.js

src/index.js
import React from 'react' import ReactDOM from 'react-dom' const Root = () => <div>Hello World!</div> ReactDOM.render(<Root />, document.getElementById('root'))

8. Add package.json scripts

package.json
"scripts": { "build:prod": "webpack --mode=production", "build:dev": "webpack --mode=development" }

9. establish dev server with hot reload

package.json
"scripts": { "start:dev": "webpack-dev-server --mode=development --open --hot" }
ā† Go home