【问题标题】:Webpack 2 HMR on Preact AppPreact App 上的 Webpack 2 HMR
【发布时间】:2017-02-07 04:44:15
【问题描述】:

我正在尝试使用 Webpack 2 和 Preact 设置热模块重新加载。它正在“工作”,因为它每次重新加载都会重新加载应用程序的全部内容,但我在热重新加载之间遇到错误(我认为这就是为什么单个组件不是唯一重新加载的原因)。

这是我的 webpack 设置的相关部分:

plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NoEmitOnErrorsPlugin(),
    new webpack.NamedModulesPlugin(),
    //etc.
],
entry: [
    'webpack-dev-server/client?'+DEV_SERVER,
    'webpack/hot/only-dev-server',
    './dev/jsx/index.jsx'
],
devServer: {
    hot: true,
    inline: true,
    contentBase: path.join(__dirname, '/'),
    publicPath: '/'
}

我的 index.jsx 文件如下所示:

import React from 'react';
import ReactDOM from 'react-dom';

import App from './AppProvider.jsx';

const renderApp = () => {
  ReactDOM.render(<App/>, document.getElementById('root'));
};

renderApp();

if (module.hot) {
  module.hot.accept();
  module.hot.accept('./AppProvider.jsx', renderApp);
}

当我对任何项目文件进行更改时,应用程序内容会重新加载,并且出现以下错误:

你们中的任何人以前有过这个吗?我在谷歌上搜索了一整天,没有找到任何东西......

【问题讨论】:

    标签: reactjs webpack webpack-hmr hot-module-replacement preact


    【解决方案1】:

    您正在渲染旧的 AppProvider 模块,该模块在 HMR 启动时为空。您需要将 AppProvider.jsx 的 require()/import 移动到您的 HMR 处理程序 as shown here

    import React from 'react';
    import ReactDOM from 'react-dom';
    
    
    const renderApp = () => {
      let App = require('./AppProvider.jsx');
      App = App.default || App;   // if you're using ES Modules
      ReactDOM.render(<App/>, document.getElementById('root'));
    };
    
    renderApp();
    
    if (module.hot) {
      module.hot.accept('./AppProvider.jsx', renderApp);
    }
    

    【讨论】:

    • 在此更改后仍然看到完全相同的错误。事实上,我复制了整个文件(除了 React/DOM 导入而不是直接 Preact),但仍然看到我之前看到的相同的重新加载+错误。
    • 更新:我觉得在问题中没有提到这一点真的很傻,但我正在运行 Webpack 2(注意到链接项目在 webpack 1 上)。
    • 嗯 - 你在使用 React Hot Loader 吗?
    • 是的,最新的 3.0.0-beta.6。
    • AFAIK 不能与 preact-compat 一起正常工作。这是我的待办事项清单上的东西(字面意思是现在打开标签哈哈)
    猜你喜欢
    • 2017-01-21
    • 1970-01-01
    • 2017-09-15
    • 2017-05-25
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    相关资源
    最近更新 更多