Webpack hmr:找不到__webpack_hmr 404

时间:2016-12-27 09:09:03

标签: webpack webpack-dev-server

我正在使用webpack-dev-server进行热模块更换。它运行得很好,但这个错误每隔几秒就会在控制台中显示出来:GET http://mysite:8080/__webpack_hmr 404 (Not Found)

这是我的webpack.config.js:

var webpack = require('webpack'),
    hostname = 'mysite',
    port = 8080;

module.exports = {
    entry: [
        'babel-polyfill',
        './src/js/main.js',
        './dev/requireCss.js',
        'webpack/hot/dev-server',
        // I'm assuming the fault lies in the following line, but I can't figure out what's wrong
        'webpack-hot-middleware/client?path=http://'+hostname+':'+port+'/__webpack_hmr'
    ],
    output: {
        path: __dirname + '/webpack',
        filename: "bundle.js",
        publicPath: 'http://'+hostname+':'+port+'/'
    },
    module: {
        loaders: [{
            test: /\.jsx?$/,
            exclude: /(node_modules|bower_components)/,
            loaders: ['react-hot', 'babel-loader?presets[]=react&presets[]=es2015']
        } // removed some loaders for brevity
        ]
    },
    resolve: {
        extensions: ['', '.json', '.js', '.jsx']
    },
    plugins: [
        new webpack.HotModuleReplacementPlugin()
    ],
    devtool: "source-map",
    devServer: {
        contentBase: __dirname + '/dev',
        hot: true,
        proxy: [{
            path: /\/(?!__webpack_hmr).+/, // I get the same error if I change this to 'path: /\/.+/'
            target: 'http://my-backend.localhost'
        }]
    }


};

我们的想法是,开发服务器应将除/__webpack_hmr之外的所有请求转发到我的后端(my-backend.localhost)。这适用于除__webpack_hmr之外的所有内容。

我的conf中是否可以更改某些内容以使错误消失?

3 个答案:

答案 0 :(得分:15)

通过删除条目下的以下行修复: 'webpack-hot-middleware/client?path=http://'+hostname+':'+port+'/__webpack_hmr'我不知道它为何起作用。请参阅Amin Ariana的答案,解释为什么这对你有用。

答案 1 :(得分:4)

条目数组中的这一行不能与webpack-dev-server配合使用:

webpack-hot-middleware/client

因为使用webpack-hot-middleware以外的任何服务器(例如webpack-dev-server或其他类似服务器),这是express的要求。

我通过遵循Webpack教程遇到了这个混合服务器问题。他们应该对其进行更新,以使使用webpack-dev-server的Webpack配置文件的入口点不需要webpack-hot-middleware生成的工件,该工件会尝试将开发人员的模块更新热发射到定制的服务器取决于它。

您可以从条目数组中删除该行,这在使用dev-server的情况下应该可以解决问题。

仅供参考,您代码中的这一行来自此处: https://github.com/webpack-contrib/webpack-hot-middleware 它说:

  

webpack-hot-middleware/client?...添加到   [webpack配置的]入口数组。这连接到服务器接收   捆绑包重建然后更新您的客户端时的通知   相应地捆绑。

根据您的问题“我正在使用webpack-dev-server”,因此您没有在使用“ webpack-hot-middleware”,因此应删除输入行。

答案 2 :(得分:1)

我将在此处添加我的答案,因为就我而言,这就是导致此问题的原因。

假设您正在使用 Next.JS

收到此问题后,我要做的就是关闭nodeJS的调试窗口(chrome调试工具,但对于BE,而不是UI),然后仅使用npm start重新启动项目

我希望它会帮助任何面对它的人(这里的其他答案不适合我)