【问题标题】:Webpack 2 + React Hot Loader Not WorkingWebpack 2 + React Hot Loader 不工作
【发布时间】:2017-04-25 07:42:30
【问题描述】:

我正在尝试让 Webpack 2 + React Hot Loader 工作,但它似乎没有热重载。它可以正确呈现网页,但无论何时我对“App.js”文件进行任何更改,它都不会执行任何操作。

webpack.config.json

var path = require('path');
var webpack = require('webpack');
module.exports = {
  entry: {
    'app': [
      'react-hot-loader/patch',
      path.join(__dirname, 'src/main.js')
    ]
  },
  output: {
    path: path.join(__dirname, 'build'),
    filename: 'bundle.js'
  },
  module: {
    rules: [
      {
        test: /\.jsx?$/,
        exclude: /node_modules/,
        loader: 'babel-loader',
      }
    ]
  }
};

.babelrc

{
  "presets": [
    ["env", {"modules": false}],
    "react"
  ],
  "plugins": [
    "transform-object-rest-spread"
  ]
}

package.json

{
  "main": "main.js",
  "scripts": {
    "dev": "webpack-dev-server --inline --hot"
  },
  "dependencies": {
    "express": "^4.15.2",
    "react": "^15.5.4",
    "react-dom": "^15.5.4"
  },
  "devDependencies": {
    "babel-core": "^6.24.1",
    "babel-loader": "^7.0.0",
    "babel-plugin-transform-object-rest-spread": "^6.23.0",
    "babel-polyfill": "^6.23.0",
    "babel-preset-env": "^1.4.0",
    "babel-preset-react": "^6.24.1",
    "react-hot-loader": "next",
    "webpack": "^2.4.1",
    "webpack-dev-server": "^2.4.4"
  }
}

我通过带有 --hot 和 --inline 标志的 CLI 运行 webpack-dev-server。

ma​​in.js

import React from 'react'
import ReactDOM from 'react-dom'
import { AppContainer } from 'react-hot-loader'

import App from './containers/App'

const render = Component => {
  ReactDOM.render(
    <AppContainer>
      <Component />
    </AppContainer>,
    document.getElementById('root')
  )
}

render(App)

if(module.hot) {
    module.hot.accept();
}

App.js

import React, { Component } from 'react'

export default class App extends Component {
  render() {
    return (
      <div>
        <div className="container">
          <h1>Testing</h1>
        </div>
      </div>
    )
  }
}

所以为了测试它,我将运行yarn dev 并且服务器将启动。一切都会编译,webpack 将输出webpack: Compiled sucessfully。但是,对 App.js 所做的任何更改都不会重新加载网页。网页本身的控制台只输出这个:

[HMR] Waiting for update signal from WDS...
bundle.js:15580 [WDS] Hot Module Replacement enabled.

我尝试了此处列出的各种方法 (https://github.com/webpack/webpack-dev-server/issues/100),但它们似乎都不起作用。

【问题讨论】:

  • 您的代码在什么平台/环境上运行?我的意思是操作系统。
  • 如果您使用的是 Linux 操作系统,请查看这篇文章:webpack.github.io/docs/troubleshooting.html#not-enough-watchers
  • 我刚刚在我的 Mac 上进行了测试,一切正常。之前试图在 Windows + Ubuntu Bash 上进行开发。我将查看该链接,看看它是否对我的 Windows 机器有帮助。
  • “windows + ubuntu”是什么意思?你是在虚拟机上运行的吗?
  • 没有。我正在运行 Windows 10 周年版更新附带的“Bash on Ubuntu”。

标签: reactjs webpack webpack-dev-server react-hot-loader hot-module-replacement


【解决方案1】:

在您的 main.js 上尝试更改此设置:

if(module.hot) {
    module.hot.accept();
}

对此:

  if (module.hot) {
    // Enable Webpack hot module replacement for Component
    module.hot.accept('./containers/App', () => {
      render(App);
    });
  }

你可以在docs看到更详细的例子

编辑:
根据文档示例,您需要在accept 的回调中调用render

也可以看看webpack config

【讨论】:

  • 我现在实际上并没有使用 redux,因为我正在尝试设置热重载,所以我不知道 store.replaceReducer 会做什么......
  • 是的,对不起,我从我们的项目中粘贴了它,忘记删除这一行。我用指向特定文档的链接更新了我的答案
  • 接受此答案以结束问题。
  • 两者都成功了。不管我使用的是你的修复还是我原来的修复。
猜你喜欢
  • 2016-02-28
  • 2018-02-11
  • 2017-07-06
  • 2017-07-15
  • 2020-01-01
  • 2017-11-03
  • 2016-06-14
  • 2016-08-20
  • 2015-12-03
相关资源
最近更新 更多