我一直在嘗試使用Webpack-Dev-Server來配置Webpack 2熱模塊替換。Webpack熱模塊替換不注入更新的代碼
webpack.config.js
如下:
const path = require('path');
const Webpack = require('webpack');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const HotModuleReplacement = new Webpack.HotModuleReplacementPlugin();
const NamedModulesPlugin = new Webpack.NamedModulesPlugin();
const NoEmitOnErrorsPlugin = new Webpack.NoEmitOnErrorsPlugin();
const extractCSS = new ExtractTextPlugin('main.css');
const extractSCSS = new ExtractTextPlugin('styles.css');
const config = {
entry: [
'webpack-dev-server/client?http://localhost:8080',
// bundle the client for webpack-dev-server
// and connect to the provided endpoint
'webpack/hot/only-dev-server',
// bundle the client for hot reloading
// only- means to only hot reload for successful updates
'./src/index.js',
],
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
publicPath: 'http://localhost:8080/',
hotUpdateChunkFilename: 'hot/hot-update.js',
hotUpdateMainFilename: 'hot/hot-update.json',
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: [
path.resolve(__dirname, 'node_modules'),
],
loader: 'babel-loader',
options: {
presets: ['react', 'es2015', 'stage-2'],
},
},
{
test: /\.scss$/,
loader: extractSCSS.extract({
fallback: 'style-loader',
use: ['css-loader', 'postcss-loader', 'sass-loader'],
}),
},
{
test: /\.css$/,
loader: extractCSS.extract({
fallback: 'style-loader',
use: ['css-loader', 'postcss-loader'],
}),
},
],
},
plugins: [
extractCSS,
extractSCSS,
HotModuleReplacement,
NamedModulesPlugin,
NoEmitOnErrorsPlugin,
],
devtool: 'source-map',
devServer: {
publicPath: 'http://localhost:8080/',
contentBase: './',
inline: true,
hot: true,
historyApiFallback: true,
stats: {
colors: true,
},
},
};
module.exports = config;
我有了這個文件夾結構:
/
/src
/src/index.js
/src/index.scss
,我想我需要使用HMR API在index.js
像這樣:
import MockComponent from './MockComponent/MockComponent';
export default class App {
constructor() {
this.mock = new MockComponent();
}
render() {
return `<div class="element">${this.mock.render()}</div>`;
}
}
let app = {};
app = new App();
const mainDiv = document.querySelector('#root');
mainDiv.innerHTML = app.render();
// Hot Module Replacement API
if (module.hot) {
module.hot.accept();
}
問題是,當我在代碼中進行更改時控制檯我:
但隨後的HMR似乎它沒有這樣做所再現的任何變化。
請問有人能幫我解決這個問題嗎?
非常感謝
你最終解決了這個問題嗎?這個答案有幫助嗎? –
謝謝你的回答,但我還沒有排序。我從我的開發環境中刪除了'ExtractTextPlugin',但是現在我得到一個'[HMR]更新失敗:錯誤:對http://localhost/hot/hot-update.json的清單請求超時。 at XMLHttpRequest.request.onreadystatechange(http:// localhost:8080/main.bundle.js:38:22)在控制檯中輸出以替換組件樣式(請參閱此分支https:// github。 COM/andrixb/WebpackSassStarter/BLOB/testHMR/webpack.config.js)。我有兩個單獨的配置dev和prod,所以我沒有像你所顯示的那樣使用environment var。 – andrixb