TreeviewCopyright © aleen42 all right reserved, powered by aleen42

React Hot Loader Back

Deprecated: This hot loader does not work for creating *.hot-update.json, waiting for the releasing of version 3.

Installation

npm install webpack-dev-server --save-dev
npm install react-hot-loader --save-dev

Development Server

Create a file server.js to include the following script:

/** server.js */

var webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server');
var config = require('./webpack.config');

new WebpackDevServer(webpack(config), {
    publicPath: config.output.publicPath,
    hot: true,
    historyApiFallback: true
}).listen(3000, 'localhost', function (err, result) {
    if (err) {
        return console.log(err);
    }

    console.log('Listening at http://localhost:3000/');
});

Then configure package.json to call the Webpack server on npm start:

{
    "scripts": {
        "start": "node server.js",
        "test": "echo \"Error: no test specified\" && exit 1"
    }
}

Configuration

Configure react-hot for a webpack by editing webpack.config.js:

Add entry for hot reloading server firstly:

module.exports = {
    entry: [
        'webpack-dev-server/client?http://0.0.0.0:3000',    /** WebpackDevServer host and port */
        'webpack/hot/only-dev-server',                      /** "only" prevents reload on syntax errors */
        './src/tick.js'
    ]
};

Then put react-hot before other loader(s):

module.exports = {
    module: {
        loaders: [
            {
                test: /\.jsx?$/,
                loaders: [
                    'react-hot',
                    'babel-loader'
                ],
                exclude: /node_modules/,
                query: {
                    presets: ['es2015', 'react']
                }
            }
        ]
    }
};

Finally, add the Hot Replacement plugin.

const webpack = require('webpack');

module.exports = {
    plugins: [
        new webpack.HotModuleReplacementPlugin()
    ]
};

Note: If you are using Webpack Dev Server command line interface instead of its Node API, and you specify --hot mode, don't add this plugin. It is mutually exclusive with the --hot option.

Therefore, the whole configuration file should be :

const webpack = require('webpack');

module.exports = {
    entry: [
        'webpack-dev-server/client?http://0.0.0.0:3000',    /** WebpackDevServer host and port */
        'webpack/hot/only-dev-server',                      /** "only" prevents reload on syntax errors */
        './src/tick.js'
    ],
    output: {
        path: __dirname + '/build',
        filename: 'tick.js'
    },
    resolve: {
        extensions: ['', '.js', '.jsx']
    },
    module: {
        loaders: [
            {
                test: /\.jsx?$/,
                loaders: [
                    'react-hot',
                    'babel-loader'
                ],
                exclude: /node_modules/,
                query: {
                    presets: ['es2015', 'react']
                }
            }
        ]
    },
    plugins: [
        new webpack.HotModuleReplacementPlugin()
    ]
};

Start the Server

npm start
Empty Comments
Sign in GitHub

As the plugin is integrated with a code management system like GitLab or GitHub, you may have to auth with your account before leaving comments around this article.

Notice: This plugin has used Cookie to store your token with an expiration.