generator-min-react-hmr-wp-2
Version:
Minimal React JS app with Webpack2 with HMR
159 lines (131 loc) • 3.21 kB
Markdown
## Minimal React JS app with Webpack2 with HMR :
#### Prerequisite :
> ##### Install NodeJS v7.x.x and run following
> `npm install -g yarn webpack webpack-dev-server`
### Setup
1. `yarn init`
2. `yarn add babel-core babel-loader babel-preset-react react react-dom`
3. `yarn add babel-cli react-hot-loader webpack webpack-dev-server`
4. Create folders structure as :
```
<Root Directorty>
|
|___ build
| |___ index.html
|
|___ src
| |___ components
| | |__ App
| | |__ index.js
| |
| |___ index.js
|
|___ webpack.config.js
|
|
|___ .babelrc
```
5. Add following to `.babelrc` :
```json
{
"presets": [
["env", {"modules": false}],
"react"
],
"plugins": [
"react-hot-loader/babel"
]
}
```
6. Add following to `webpack.config.js` :
```javascript
const { resolve } = require('path');
const webpack = require('webpack');
module.exports = {
context: resolve(__dirname, 'src'),
entry: [
'react-hot-loader/patch',
'webpack-dev-server/client?http://localhost:3000',
'webpack/hot/only-dev-server',
'./index.js'
],
output: {
path: resolve(__dirname, 'build'),
filename: '[name].bundle.js'
},
module: {
rules: [{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader'
}
}]
},
/**
* Watch mode with Chrome DevTools
*/
devtool: "inline-source-map",
/**
* Webpack Dev Server
*/
devServer: {
contentBase: resolve(__dirname, "build"),
compress: true,
port: 3000,
clientLogLevel: "info",
historyApiFallback: true,
hot: true,
overlay: true
},
plugins : [
new webpack.HotModuleReplacementPlugin(),
new webpack.NamedModulesPlugin()
]
};
```
7. Add following to `src/index.js` :
```javascript
import React from 'react';
import ReactDOM from 'react-dom';
import { AppContainer } from 'react-hot-loader';
import App from './components/App';
const render = (Component) => {
const contentRoot = document.getElementById('root');
ReactDOM.render(
<AppContainer>
<Component/>
</AppContainer>
, contentRoot);
}
render(App);
//HMR API - enabled by devServer: { hot: true } in webpack-dev-server config
if(module.hot){
module.hot.accept('./components/App', () => {
render(App);
});
}
```
8. Add following to `src/components/App/index.js` :
```javascript
import React, { Component } from 'react';
class App extends Component {
render() {
return (
<div>
<h1> HMR With React/WebPack2 Enabled! </h1>
<h2><small> First Container Page </small></h2>
</div>
);
}
}
export default App;
```
9. Add following to your `package.json` 's `scripts` section :
```json
"scripts": {
"start": "webpack-dev-server"
},
```
10. Run `npm start` in terminal
11. You are Set!