无法设置#<object>的属性createElement,它只是一个getter

时间:2017-05-28 16:13:44

标签: reactjs babeljs webpack-2 react-hot-loader preact

描述

您的报告内容:我正在关注如何设置React hot loarder set of instructions。但是,当我进入第3步,我将修补程序放入其中时,它会突破到下面的那个。

预期行为

您认为应该发生什么:应该正常工作

实际行为

image

环境

React Hot Loader版本:下一步

在项目文件夹中运行这些命令并填写结果:

  1. node -v:7.9.0
  2. npm -v:4.2.0
  3. 然后,指定:

    1. 操作系统:Windows 10
    2. 浏览器和版本:最新Chrome
    3. 可重复演示

      https://github.com/abarcenas29/preact-sandbox-v0/blob/wip/hot-reloader/src/main.js

      branch:wip-hot-reloader

      说明:

      • yarn
      • yarn run postinstall
      • yarn run start:dev

1 个答案:

答案 0 :(得分:10)

我没有足够的声誉发表评论,所以我必须写一个答案,这不是问题的解决方案,但仍然......

您收到的错误是由于react-hot-loader/patch需要实际的react模块并使用新模块修补其createElement功能。 请在此处查看:react-hot-loader/lib/patch.dev.js:179

主要问题是webpack config react模块已解析为preact-compat,显然不允许设置新值,因此Hot Reload无法一起运行。

希望这能回答你的问题。因为它是 - 我认为热重装不会在该设置中工作。

修改 找到一个简单的解决方 将webpack.config.js解析块更改为此,将react指向您自己的脚本:

// resolve for preact
webpack.resolve = {
  alias: {
    react: path.resolve(__dirname, 'react.js')
    // the rest goes as before
  }
}

现在创建react.js文件并将其放入内部(根据需要更改路径和名称):

var preact = require('preact-compat');

var react = {};
// Copy object properties to a new object which will allow react-hot-loader to do its magic
Object.keys(preact).forEach(function(key) {
    react[key] = preact[key];
});

module.exports = react;

完成了! HMR现在正在工作。