Я новичок в вебпаке и хочу простую конфигурацию, которая перезагрузит мои изменения SCSS, HTML и JS в браузер. Я читал об использовании опции options: { hmr: true }
в конфигурации для style-loader
, а также об использовании webpack-dev-server
для этого. Мои изменения вызывают успешную перекомпиляцию, но я должен перезагрузить браузер, чтобы увидеть изменения. Это именно то, для чего я понимаю HMR.
Вот мой конфиг веб-пакета:
// webpack v4
const path = require('path');
// update from 23.12.2018
const nodeExternals = require('webpack-node-externals');
// const ExtractTextPlugin = require('extract-text-webpack-plugin');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
module.exports = {
entry: { main: './src/index.js' },
output: {
path: path.resolve(__dirname, 'dist'),
filename: '[name].[hash].js'
},
target: 'node', // update from 23.12.2018
externals: [nodeExternals()], // update from 23.12.2018
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader"
}
},
{
test: /\.scss$/,
use: [
// { loader: 'style-loader', options: { hmr: true } },
'style-loader',
MiniCssExtractPlugin.loader,
'css-loader',
'postcss-loader',
'sass-loader'
]
}
]
},
plugins: [
new CleanWebpackPlugin(),
new MiniCssExtractPlugin({
filename: 'style.[hash].css'
}),
new HtmlWebpackPlugin({
inject: false,
hash: true,
template: './src/index.html',
filename: 'index.html'
})
]
};
Последнее, что я попробовал, это просто запуск (согласно этому руководству https://medium.freecodecamp.org/how-to-combine-webpack-4-and-babel-7-to-create-a-fantastic-react-app-845797e036ff):
node_modules/.bin/webpack-dev-server --mode development --open --hot --history-api-fallback
Поскольку я не могу найти подобных проблем в сети, я полагаю, что это как-то связано с моей конфигурацией.
Вот мой package.json
:
{
"name": "webpack-4-tutorial",
"version": "1.0.0",
"description": "test",
"main": "index.js",
"license": "MIT",
"private": false,
"devDependencies": {
"@babel/core": "^7.4.3",
"@babel/preset-env": "^7.4.3",
"autoprefixer": "^9.5.1",
"babel-loader": "^8.0.5",
"clean-webpack-plugin": "^2.0.1",
"css-loader": "^2.1.1",
"extract-text-webpack-plugin": "^4.0.0-beta.0",
"html-webpack-plugin": "^3.2.0",
"mini-css-extract-plugin": "^0.6.0",
"node-sass": "^4.11.0",
"postcss-loader": "^3.0.0",
"precss": "^4.0.0",
"sass-loader": "^7.1.0",
"style-loader": "^0.23.1",
"stylelint": "^10.0.1",
"stylelint-config-recommended": "^2.2.0",
"webpack": "^4.30.0",
"webpack-cli": "^3.3.1",
"webpack-dev-server": "^3.3.1",
"webpack-node-externals": "^1.7.2"
},
"scripts": {
"dev": "webpack --mode development --watch",
"build": "webpack --mode production"
}
}
Изначально создал файл конфигурации на основе этого руководства , но он не вышел за пределы флага webpack --watch
.
Заранее спасибо.