我正在尝试在webpack配置中使用HRM(热模块替换),首先我已经在package.json中设置了--hot选项:
"scripts": {
"start": "webpack-dev-server --hot"
}
同时请注意,我正在使用HtmlWebpackPlugin来为我创建一个index.html文件,并将其放在“build”目录中,以下是我的完整webpack.config.js文件:
const path = require('path');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const TerserJSPlugin = require('terser-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const WebpackManifestPlugin = require('webpack-manifest-plugin');
var HtmlWebpackPlugin = require('html-webpack-plugin');
// const webpack = require('webpack');
const mode = "development";
module.exports = {
mode: mode,
// watch: true,
devtool: "cheap-module-eval-source-map",
devServer: {
port: 9000,
// contentBase: path.resolve(__dirname, 'build')
},
entry: {
application: "./src/javascripts/index.js",
admin: "./src/javascripts/admin.js"
},
output: {
filename: mode === 'production' ? "[name]-[contenthash].js" : '[name].[hash].js',
path: path.resolve(__dirname, 'build'),
// publicPath: '/'
},
optimization: {
minimizer: [new TerserJSPlugin({}), new OptimizeCSSAssetsPlugin({})],
},
plugins: [
new MiniCssExtractPlugin({
filename: mode === 'production' ? "[name]-[contenthash].css" : "[name]-[hash].css",
hmr: mode === 'production' ? false : true
}),
new CleanWebpackPlugin(),
new WebpackManifestPlugin(),
new HtmlWebpackPlugin({
template: './src/template.html',
// filename: '../index.html'
})
// new webpack.HotModuleReplacementPlugin()
],
module: {
rules: [
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
},
{
test: /\.css$/i,
use: [
MiniCssExtractPlugin.loader,
{ loader: 'css-loader', options: { importLoaders: 1 } },
{
loader: 'postcss-loader',
options: {
plugins: [
require('autoprefixer')({
overrideBrowserslist: ['last 3 versions', 'ie > 9']
})
]
}
},
],
},
{
test: /\.scss$/i,
use: [
MiniCssExtractPlugin.loader,
{ loader: 'css-loader', options: { importLoaders: 1 } },
{
loader: 'postcss-loader',
options: {
plugins: [
require('autoprefixer')({
overrideBrowserslist: ['last 3 versions', 'ie > 9']
})
]
}
},
'sass-loader'
],
},
{
test: /\.(png|jpg|gif|svg)$/i,
use: [
{
loader: 'file-loader',
options: {
limit: 8192,
name: '[name].[hash:7].[ext]'
},
},
{
loader: 'image-webpack-loader'
}
],
}
]
}
}
如您所见,我主要使用的入口是./src/javascripts/index.js
,在这里导入了一个名为application.scss的文件:
import application from "../stylesheets/application.scss"
application.scss 包含:
span{
background-color: blue;
}
我希望在更改html页面中的span标签的背景颜色时,能够实现页面的热重载。
当我运行 npm run start
命令后,更改了span标签的背景颜色,更新会第一次生效但会进行整个页面的重新加载,如果我再试图更改背景颜色,则不会有任何更新,并且控制台中只会显示以下内容:
[HMR] Nothing hot updated. log.js:24
[HMR] App is up to date.
我不确定我错了什么,但是有人可以看到我做错了什么吗?
(这是关于IT技术的问题)
Entrypoint undefined = index.html
这是一个屏幕截图:http://i.imgur.com/zybOtvZ.png - medBouziddevServer: { watchFiles: ['ui/**/*'],
但应该是:devServer: { watchFiles: ['ui/dist/**/*'],
- arczi