我一直在尝试使用 Webpack-Dev-Server 配置 Webpack 2 Hot Module Replacement。
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
我认为我需要index.js
像这样使用 HMR API:
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 似乎没有对渲染进行任何更改。
有人可以帮我解决这个问题吗?
非常感谢