2017-02-07 11 views
0

Webpack とPreactでホットモジュールリロードをセットアップしようとしています。リロードするたびにアプリケーションの内容全体がリロードされているという点では「動作しています」が、ホットリロードの間にエラーが発生しています(個々のコンポーネントだけがリロードされるわけではありません)。Webpack 2 HMR on Preact App

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); 
} 

は、ここに私のWebPACKのセットアップの関連部分ですアプリのコンテンツがリロードされ、次のエラーが表示されます。 enter image description here

この前に?私は一日中グーグルで行っていて何も見つけていませんでした...

答えて

0

HMproが起動するときに古いAppProviderモジュールをレンダリングしています。あなたはrequire()/ importをAppProvider.jsxを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); 
} 
+0

この変更後もまったく同じエラーが表示されます。実際には、ファイル全体(React/DOMインポートを直接Preactではなく)でコピーしましたが、前に見たのと同じリロード+エラーが表示されます。 –

+0

更新:私はこの質問に言及していないのは本当に馬鹿だと思うが、私は** Webpack 2 **を実行している(リンクされたプロジェクトはwebpack 1にあることに気づいた)。 –

+0

Hmm - あなたはReact Hot Loaderを使っていますか? –

関連する問題