获取"因为0不被接受而中止"并使用react-hot-loader重新加载整页

S.K*_*ers 7 javascript ruby-on-rails reactjs webpack react-hot-loader

我正在尝试使用react-hot-loader设置webpack热重装.它似乎主要是工作.我在现有的rails应用程序中使用webpack.

但它不是热重装.每次我的反应代码改变时,它只是触发重载.我得到的错误消息是:

[HMR] Cannot apply update. Need to do a full reload! - dev-server.js:18
[HMR] Error: Aborted because 0 is not accepted - dev-server.js:19
  at hotApply (http://localhost:8080/assets/webpack/bundle.js?body=1:380:31)
  at hotUpdateDownloaded (http://localhost:8080/assets/webpack/bundle.js?body=1:293:13)
  at hotAddUpdateChunk (http://localhost:8080/assets/webpack/bundle.js?body=1:273:13)
  at webpackHotUpdateCallback (http://localhost:8080/assets/webpack/bundle.js?body=1:5:12)
  at http://localhost:8080/assets/webpack0.bd89931b2fa8e2901794.hot-update.js:1:1

Navigated to http://lvh.me:3000/react_page
Run Code Online (Sandbox Code Playgroud)

这是我的webpack.hot.config.js设置:

var path = require('path');
var webpack = require('webpack');

var config = module.exports = {

    // Set 'context' for Rails Asset Pipeline
    context: __dirname,

    entry: {
        App: [
            'webpack-dev-server/client?http://localhost:8080/', // WebpackDevServer host and port
            'webpack/hot/only-dev-server', // "only" prevents reload on syntax errors
            './app/frontend/javascripts/app.js' // Your app?s entry point
        ],
        vendor: ['jquery', 'react', 'react-dom', 'react-redux', 'redux','redux-thunk']
    },

    devtool: 'inline-source-map',

    // Require the webpack and react-hot-loader plugins
    plugins: [
        //new webpack.HotModuleReplacementPlugin(),
        new webpack.optimize.CommonsChunkPlugin(
        {
            name: 'vendor',
            chunks: [''],
            filename: 'vendor.js',
            minChunks: Infinity
        }),
        new webpack.NoErrorsPlugin(),
        new webpack.ProvidePlugin({
            $: 'jquery',
            jQuery: 'jquery',
            'window.jquery': 'jquery'
        })
    ],
    module: {
        loaders: [
            {
                test: /\.jsx?$/,
                exclude: /node_modules/,
                loaders: [
                    'react-hot',
                    'babel?presets[]=es2015&presets[]=react'
                ],
                cacheDirectory: true
            }
        ]
    },
    output: {
        path: path.join(__dirname, 'app', 'assets', 'javascripts', 'webpack'), // Save to Rails Asset Pipeline
        filename: 'bundle.js', // Will output App_wp_bundle.js
        publicPath: 'http://localhost:8080/assets/webpack',

        //publicPath: 'http://localhost:8080/assets/webpack' // Required for webpack-dev-server
    },
    resolve: {
        extensions: ['', '.js', '.jsx'],
        modulesDirectories: ['node_modules'],
    },

};
Run Code Online (Sandbox Code Playgroud)

我运行代码

webpack-dev-server -d --config webpack.hot.config.js --hot --inline
Run Code Online (Sandbox Code Playgroud)

rails开发环境通过webpack-dev-server为应用程序资产管道外的webpack文件提供服务,因为我的development.rb文件中有以下设置.

config.action_controller.asset_host = Proc.new { |source|
  if source =~ /webpack\/bundle\.js$/i
    "http://localhost:8080"
  end
}
Run Code Online (Sandbox Code Playgroud)

我一直试图让这个工作几个小时.任何帮助,将不胜感激.

多谢你们!

Raf*_*ato 7

好吧我得到了同样的错误,但在尝试了一些事情之后我想出了这个:我的根组件是一个无状态功能组件(纯函数).我将它重构为类组件和BAM!热重装正在重新开始.

之前:

const App = (props) => (
  <div>
    <Header links={headerLinks} logoSrc={logoSrc} />
    {props.children}
  </div>
);
Run Code Online (Sandbox Code Playgroud)

后:

class App extends React.Component {
  render() {
    return (
      <div>
        <Header links={headerLinks} logoSrc={logoSrc} />
        {this.props.children}
      </div>
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 电梯节电器,你知道它为什么这么做吗? (2认同)

Nwa*_*ume 5

由于上面提供的答案在我这边仍然无法使用webpack 5 ,这是webpack的工作配置

webpack.config.js中

devServer: {
    .
    .
    .
    hot: true,
  }
Run Code Online (Sandbox Code Playgroud)

在 webpack 入口点index.js添加

if (module.hot) {
    module.hot.accept();
}
Run Code Online (Sandbox Code Playgroud)

package.json启动脚本中

"scripts": {
    .
    .
    "start": "webpack serve --config /webpack.config.js"
  },
Run Code Online (Sandbox Code Playgroud)


lfe*_*445 1

我不知道这是否会具体帮助您的问题,但我最近也遇到了这个错误 - 我通过向我.js尝试使用 hmr 设置的模块添加扩展来修复它 - 这是我的代码

if (module.hot) {
  module.hot.accept('app/Routes', () => (
    getRoutes = require('app/Routes')
  ))
}
Run Code Online (Sandbox Code Playgroud)

getRoutes = require('app/Routes.js')使用 更新了它,错误消失了webpack ^2.0.0-beta

如果我将 JS 扩展添加为热接受的第一个参数,它也可以工作,如下所示:

if (module.hot) {
  module.hot.accept('app/Routes.js', () => (
    getRoutes = require('app/Routes')
  ))
}
Run Code Online (Sandbox Code Playgroud)

所以现在它与webpack HMR 页面上的内容匹配