#webpack
#webpack
Вопрос:
Я начинаю изучать Webpack4 и не могу заставить HMR работать. У меня следующая структура:
>dist
index.html
bundle.js
>src
>img
>css
style.scss
>modules
someModule.js
index.html
index.js
В package.json у меня есть:
"script": {
"devStart": "webpack-dev-server --mode development --open"
},
"devDependencies": {
"@babel/core": "^7.4.0",
"@babel/preset-env": "^7.4.2",
"babel-loader": "^8.0.5",
"css-loader": "^2.1.1",
"file-loader": "^3.0.1",
"html-loader": "^0.5.5",
"html-webpack-plugin": "^3.2.0",
"mini-css-extract-plugin": "^0.5.0",
"node-sass": "^4.11.0",
"sass-loader": "^7.1.0",
"style-loader": "^0.23.1",
"webpack": "^4.29.4",
"webpack-cli": "^3.2.3",
"webpack-dev-server": "^3.2.1"
}
В webpack.config.js:
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.join(__dirname, 'dist')
},
devServer: {
contentBase: path.join(__dirname, 'src'),
port: 8888,
inline: true,
hot: true
},
module: {
rules: [
{
test: /.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
},
{
test: /.html$/,
use: {
loader: 'html-loader',
options: {
minimize: true
}
}
},
{
test: /.scss$/,
use: [
{ loader: 'style-loader' },
{ loader: 'css-loader' },
{ loader: 'sass-loader' }
]
},
{
test: /.(png|svg|jpg|jpeg|gif)$/,
use: {
loader: 'file-loader'
}
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
}),
new MiniCssExtractPlugin({
filename: "[name].css",
chunkFilename: "[id].css"
}),
new webpack.HotModuleReplacementPlugin()
]
};
Я импортирую стиль в index.js и только изменения в этом файле вызывают HMR.
Когда я меняю index.html мне приходится перезагружать вручную, и когда я меняю модуль или index.js файл, который вызывает полную перезагрузку.
Когда я устанавливаю значение hotOnly в true, я получаю сообщение об ошибке:
Ignored an update to unaccepted module ./src/index.js
[HMR] The following modules couldn't be hot updated: (They would need a full reload!)