Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Invalid HMR message error Webpack

Tags:

I'm getting the following error from Webpack:

Invalid HMR message Followed by a string of very detailed JSON.

There really aren't any resources that I can find to better debug this. Any tips?

Webpack console errors

Bonus if anyone can give me insight to why require can't be found when it's used throughout the app no problem.

Here are some details:

  • Running Node/Babel
  • Using Webpack

NPM dependencies:

  "dependencies": {     "babel-core": "^6.7.2",     "babel-polyfill": "^6.7.4",     "body-parser": "~1.12.0",     "cookie-parser": "~1.3.4",     "css-modules-require-hook": "^4.0.0",     "cuid": "^1.3.8",     "debug": "~2.1.1",     "express": "~4.12.2",     "fs": "0.0.2",     "react": "^0.14.7",     "react-dom": "^0.14.7",     "react-redux": "^4.4.1",     "react-router": "^2.0.1",     "redux": "^3.3.1",     "serve-favicon": "~2.2.0",     "webpack": "^1.12.13"   },   "devDependencies": {     "babel-eslint": "^5.0.0",     "babel-loader": "^6.2.4",     "babel-plugin-react-transform": "^2.0.2",     "babel-polyfill": "^6.7.4",     "babel-preset-es2015": "^6.6.0",     "babel-preset-react": "^6.5.0",     "babel-preset-react-hmre": "^1.1.1",     "babel-register": "^6.7.2",     "cross-env": "^1.0.7",     "css-modules-require-hook": "^4.0.0",     "eslint": "^2.6.0",     "redux-devtools": "^3.1.1",     "redux-devtools-dock-monitor": "^1.1.0",     "redux-devtools-log-monitor": "^1.0.4",     "webpack-dev-middleware": "^1.5.1",     "webpack-hot-middleware": "^2.10.0"   } 

Webpack config:

var webpack = require('webpack'); var path = require('path'); var fs = require('fs');    var nodeModules = {}; fs.readdirSync('node_modules')   .filter(function(x) {     return ['.bin'].indexOf(x) === -1;   })   .forEach(function(mod) {     nodeModules[mod] = 'commonjs ' + mod;   });  module.exports = {   devtool: 'cheap-source-map',    entry: ['webpack-hot-middleware/client',           './index.js',   ],   target: 'node',   output: {     path: __dirname,     filename: 'bundle.js',   },    resolve: {     extensions: ['', '.js', '.jsx'],   },    module: {     loaders: [       {         test: /\.css$/,         loader: 'style!css?modules',       },       {         test: /\.jsx*$/,         exclude: [/node_modules/, /.+\.config.js/],         loader: 'babel',         query: {           presets: ['react-hmre'],         },       },     ],   },    plugins: [     new webpack.HotModuleReplacementPlugin(),     new webpack.DefinePlugin({       'process.env': {         CLIENT: JSON.stringify(true)       }     })   ],    externals: nodeModules  }; 
like image 422
John Doe Avatar asked Apr 03 '16 00:04

John Doe


People also ask

What is the HMR feature in WebSocket?

The HMR feature is built on WebSocket. WebSocket is a computer communications protocol, providing full-duplex communication channels over a single TCP connection. With WebSocket, the browser and server would establish a long-lived connection. They can send or receive message between each other.

What is Webpack-Dev-Server in Webpack?

webpack-dev-server will launch a server process, which makes live reloading possible. We edit js or scss in the editor. The webpack-dev-server detect the change, it recompile the files. And send message to the browser. (It is built on WebSocket and I will talk about in a bit)

What is the HMR feature built on?

./build ├── css │ └── app.css ├── index.html ├── js │ ├── app.js │ ├── jquery.js │ └── vendors.js └── public The HMR feature is built on WebSocket. WebSocket is a computer communications protocol, providing full-duplex communication channels over a single TCP connection.


1 Answers

Set your target from node to web for the client.js.

If you are bundling a server side React app, you can add to the top of server file:

require('css-modules-require-hook')({   generateScopedName: '[name]--[local]',   prepend: [] }); 

So that the css-files required in SSR react components work.

like image 93
adamrights Avatar answered Oct 23 '22 06:10

adamrights