如果启用了热模块替换,为什么在更改 HTML 时 LiveReload 在 Webpack 中不起作用?

2024-03-21

如果你设置hot: true in the devServer设置在Webpack,那么模块热更换CSS 有效,并且无需重新加载完整页面即可应用更改。但是当改变HTML文件时,实时重载由于某种原因不起作用,您需要手动刷新页面才能应用更改。

If hot: true被禁用于devServer配置文件,然后更改 HTML 文件时实时重载工作正常,页面会自行重新加载,但是模块热更换因为 CSS 不起作用,当更改 CSS 时,页面会完全重新加载。

这是应该的方式吗?为什么会发生这种情况,我该如何启用模块热更换对于CSS,但同时使实时重载更改 HTML 文件时有效吗?

为了创建许多 HTML 文件,我使用HtmlWebpackPlugin plugin.

以下是配置文件:

webpack.common.js

const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CopyPlugin = require('copy-webpack-plugin');
const webpack = require('webpack');

module.exports = mode => {
const PRODUCTION = mode === 'production';

return {
    entry: {
        app: './src/index.js',
    },
    output: {
        filename: 'js/[name].bundle.js',
        path: path.resolve(__dirname, 'dist'),
        publicPath: '/',
    },
    module: {
        rules: [
            {
                test: /\.(png|jpe?g|gif|svg)$/i,
                use: [
                    {
                        loader: 'file-loader',
                        options: {
                            name: 'img/[path][name].[ext]',
                            outputPath: 'img',
                        },
                    },
                ],
            },
        ],
    },
    plugins: [
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
            hash: false,
            template: 'src/index.html',
            filename: 'index.html',
        }),
        new webpack.DefinePlugin({
            PRODUCTION: PRODUCTION,
        }),
        new CopyPlugin([
            { from: 'src/img', to: 'img' },
            { from: 'src/fonts', to: 'fonts' },
        ]),
    ],
}
};

webpack.dev.js

const merge = require('webpack-merge');
const common = require('./webpack.common.js');
const webpack = require('webpack');

module.exports = (env, argv) => {

return merge(common(argv.mode), {
    devtool: 'inline-source-map',
    devServer: {
        contentBase: './dist',
        overlay: {
            warnings: true,
            errors: true
        },
        port: 8081,
        hot: true,
    },
    watchOptions: {
        aggregateTimeout: 100,
    },
    module: {
        rules: [
            {
                test: /\.s[ac]ss$/i,
                use: [
                    'style-loader',
                    {
                        loader: 'css-loader',
                        options: {
                            sourceMap: true,
                        },
                    },
                    {
                        loader: 'sass-loader',
                        options: {
                            sourceMap: true,
                        },
                    },
                ],
            },
            {
                test: /\.css$/i,
                use: [
                    'style-loader',
                    'css-loader',
                ],
            }
        ],
    },
    plugins: [
        new webpack.HotModuleReplacementPlugin(),
    ],
});
};

如果您的问题仍然存在,请在启用 hmr 的情况下尝试以下操作:

  1. npm i chokidar --save-dev

  2. 添加到 webpack 配置文件:const chokidar = require('chokidar')

  3. 添加到 webpack-dev-server 选项:

         before(app, server) {
             chokidar.watch([
                 './build/**/*.html' //make sure to edit this path to your html files
             ]).on('all', function () {
                 server.sockWrite(server.sockets, 'content-changed');
             });
         },
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果启用了热模块替换,为什么在更改 HTML 时 LiveReload 在 Webpack 中不起作用? 的相关文章

  • 将片段部分移出屏幕

    我已经被这个问题难住有一段时间了 我试图将包含在 FrameLayout 中的片段向右移动 以便只有片段的左侧 20 可见 我认为我遇到的问题是父级不会让片段移出其边界 或者我不知道如何移动它 我所尝试的一切只是将片段推到右墙上 然后缩放片
  • 通过 declarativeNetRequest + extensionPath 重定向时获取原始 URL

    我需要在导航时但在用户从使用设置的规则重定向之前获取 chrome 选项卡的 urldeclarativeNetRequest 目前 用户可以使用上下文菜单添加规则 当尝试访问过滤的主机时 它将被重定向到内部扩展页面 chrome cont
  • Chart.js 渲染垂直堆积条形图太慢

    我正在使用 Chart js API 渲染多个堆叠的垂直条形图 但性能很慢 我什至做了一些改变 这样所有的content对象已经由服务器而不是浏览器处理 但我意识到大部分时间来自最终函数new Chart overallStatsChart
  • 使用 lambda 更新 amazon s3 对象元数据而不执行对象复制?

    是否可以使用 lambda 函数添 加或更新 s3 对象元数据而不复制对象 这篇 2 年前的帖子说我们确实需要复制一份 https stackoverflow com questions 32646646 how do i update m
  • 将表单传递给 AngularJS 组件进行验证

    我正在将旧代码库迁移到 AngularJS 1 5 所推广的新组件架构 我在对较大的表单执行此操作时遇到了问题 传统上 我会附加表单验证 如下所示
  • 在多个 angular.js 应用程序之间共享单个服务

    我正在构建一个电子商务网站 基于 shopify 并且使用多个小型 angularjs 应用程序来处理诸如快速购物车 愿望清单 过滤产品和其他一些较小项目之类的事情 我最初使用了一个大型应用程序 具有路由和所有内容 但当我没有完整的 RES
  • 如何验证单选按钮?

    我的 Rails 应用程序中有一个单选按钮 我想编写一个 java 脚本代码 在未选择任何选项时验证这一点 在你的 votes 类中做类似的事情 class Myvotes lt ActiveRecord Base validates vo
  • 任何 JavaScript 代码都是有效的 TypeScript 代码吗?

    目前我已经开始学习TypeScript 从我研究过的文档来看TypeScript 我看到一些纯的样品JavaScript代码可以编译为TypeScript code 我的问题是 TypeScript 语言的设计方式是否使任何 JavaScr
  • 为 Promise 编写循环的正确方法。

    如何正确构造循环以确保满足以下条件承诺电话和被束缚的记录器 log res 通过迭代同步运行 蓝鸟 db getUser email then function res logger log res this is a promise 我尝
  • .then(functionReference) 和 .then(function(value){return functionReference(value)}) 之间有区别吗?

    给定一个用于处理的命名函数Promise value function handlePromise data do stuff with data return data a 传递命名函数handlePromise作为参考 then pro
  • 无法将中间件与 Firebase 和 NuxtJS 3 一起使用

    我正在尝试在示例项目中使用 Firebase 身份验证 身份验证按预期工作 但是一旦我想使用中间件来阻止用户访问管理页面或在已经登录的情况下访问登录页面 这是不可能的 我已经尝试了几个小时 但没有任何效果 这是我的package json
  • 在javascript中通过window.location传递数据

    我试图通过 window location 传递数据 数据在 del id img album 中可用 我想通过 window location 发送多个值 window location save php type deldownload
  • 为什么 if 语句中的赋值等于 true?

    首先我要说的是我理解两者之间的区别 and 第一个用于将右侧值分配给左侧变量 第二个用于比较两个值的等价性 第三个不仅用于等价性 还用于类型比较 即true 1会回来false 所以我知道almost任何时候你看到if 作者很有可能打算使用
  • 用于验证网络路径的正则表达式 PHP、jQuery、JavaScript、Ruby

    尝试找出用于验证网络路径的正则表达式 即 comp xyz or comp or comp x y z storage或者所有部分都更长的东西 但希望能够传达其要点 我目前拥有的是一个简单的输入字段 用户可以通过它传递信息 事情是我不希望他
  • 脚本标签内的 Razor RenderSection - 如何将脚本从视图插入模板函数

    我正在使用 MVC 3 和 Razor 视图引擎 我想将多个视图中的脚本注入到一个集中定义的视图中 document ready 母版页中的功能 我已经尝试过以下方法 在我的大师看来 然后 section DocumentReady ale
  • Ajax调用完成后执行函数

    我是 Ajax 新手 我尝试在使用 for 循环时使用 Ajax Ajax 调用之后 我正在运行一个使用 Ajax 调用中创建的变量的函数 该函数只执行两次 我认为 Ajax 调用可能没有足够的时间在循环开始之前进行调用 有没有办法在运行
  • 为什么react中的组件需要大写? [复制]

    这个问题在这里已经有答案了 因此 当您声明一个组件以小写首字母进行反应时 它不会显示 也不会引发错误 当您将组件名称大写时 它确实有效 这样的实现是怎样的呢 为了避免与现有的 html 元素发生冲突 还是这是一个错误 var test Re
  • 同源政策目的可疑

    正如我所读到的 同源策略是防止源自 邪恶 域 A 的脚本向 良好 域 B 发出请求 换句话说 跨站点请求伪造 玩了一下我了解到的Access Control Allow Origin标头和CORS据我了解 它允许从好域 B 指定服务器 域
  • 以特定顺序运行具有效果的 jQuery 函数

    我在 javascript 函数中有一些 jQuery 可以更改页面上的文本并以特定的时间间隔淡入和淡出 我希望这些函数在每个函数完成其效果后按顺序运行 dialogueExchange1 dialogueExchange2 dialogu
  • 来自 ajax 的 Bootstrap 表 json

    我有 ajax 和 bootstrap 表的问题 我有一个 ajax JSON 我用这个方法调用 document ready function ajax url php process php method fetchdata dataT

随机推荐

  • 滚动条上的灰点[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Visual Studio 2017 中滚动条上的灰点是什么 代码建议 我遇到的一个场景是忘记利用我的方法 我看到的另一个建议是改进我
  • Google Play 控制台堆栈跟踪

    在 Google Play Console 中 我收到以下异常跟踪 虽然我添加了反混淆文件 但行号显示为 0 java lang NullPointerException at com ae apps common managers Con
  • 将对象移动到地图中

    这样做的问题是巨大的物体将被复制到地图中 Huge huge1 some args Huge huge2 some args std map
  • Python 和 websockets - 发送音频流

    我已经设置了一个套接字服务器并将消息发送到所有连接的客户端 我正在将数据从 python 发送到 javascript 我想将我的麦克风输入发送给所有正在收听的客户 所以在我的 Python 应用程序中我执行以下操作 import pyau
  • (有效)合并随机键控子集

    我有两个data tables 我想从匹配键的元素中随机将一个元素分配给另一个元素 我现在这样做的方式非常慢 让我们具体说一下 这是一些示例数据 dt1 lt data table id sample letters 1 5 500 rep
  • pandas DataFrame 多列的并排箱线图

    一年的样本数据 import pandas as pd import numpy random as rnd import seaborn as sns n 365 df pd DataFrame data A rnd randn n B
  • Chrome 开发者控制台问题

    我正在尝试测试我的网站上产生随机整数的功能 我想知道是否可以使用 chrome 开发者控制台通过代码触发按钮事件 而无需实际按下页面上的按钮 是否可以发送与用户输入文本框中的值不同的值 假设用户将他的名字输入 Tom 有没有办法通过控制台中
  • 尝试注册两个同名的ProgressBarAndroid视图

    将react版本16 0 0与react native版本0 49 1一起使用会引发红屏错误 尝试注册两个具有相同名称的ProgressBarAndroid视图 删除 ProgressBarAndroid 的所有导入和实例会产生运行良好的程
  • scikit learn:未选择所需数量的最佳功能 (k)

    我试图使用卡方 scikit learn 0 10 选择最佳特征 我首先从总共 80 个训练文档中提取 227 个特征 然后从这 227 个特征中选择前 10 个特征 my vectorizer CountVectorizer analyz
  • Hibernate 的泛型

    Hibernate 无法加载以下类 package com project alice entities import javax persistence Entity import javax persistence GeneratedV
  • 设置对话框的最大高度,然后允许滚动

    我似乎无法理解如何正确设置 jquery ui 对话框的高度 我希望它显示存在的内容的高度 但如果它超过 400 像素 那么我需要一个滚动条 因此 如果内容的高度为 200 像素 则对话框的高度应为 200 像素 如果内容的高度大于 400
  • graphviz 中跨越多行的记录

    我试图用点语言可视化一个相当复杂的结构 因为记录很大 所以我想把代码写成多行 所以而不是 A11 label A 11 Access Control A 11 1 Business requirements for access contr
  • Bash 变量替换和字符串

    假设我有两个变量 a AAA b BBB 我从文件中读取了一个字符串 该字符串如下 str a b 如何从替换变量的第一个字符串创建一个新字符串 newstr AAA BBB bash questions tagged bash多变的间接没
  • 使用 libtorrent-python 下载 Torrent

    我有以下 python 代码 import libtorrent as lt import time ses lt session ses listen on 6881 6891 params save path home download
  • iOS 15 TabView导航栏透明度问题

    新的 iOS 15 使导航栏背景完全透明 如果后面没有元素 如果有一个列表并且您将元素滚动到导航栏后面 这将获得白色半透明背景 但如果我使用 TabView 其中每个 TabItem 都有一个在选项卡项目之间切换时 导航栏背景内的列表未正确
  • 如何在bash中找到字符串中最后分组的数字

    这是一个后续问题this https stackoverflow com q 51923800 10247894问题 关于如何知道字符串中分组数字的数量 In bash 如何找到字符串中最后一次出现的一组数字 所以 如果我有 string
  • Xamarin 表单(跨平台):ListView 中的多种类型的单元格

    I am new to Xamarin I have a requirement where I have to implement a ListView or say tableView that have multiple differ
  • TortoiseGit 使用不正确的 SSH 密钥

    我现在有一个关于乌龟git的奇怪问题 我无法弄清楚 当尝试提交到 github 上的存储库时 出现错误 错误 对 key2 的 martindevans Hermes git 权限被拒绝 Key2 是我用来访问不同 github 存储库的密
  • 我可以一成不变地借用 self 来实现 self.callbacks: Vec> 吗?

    pub struct Notifier lt a T gt callbacks Vec
  • 如果启用了热模块替换,为什么在更改 HTML 时 LiveReload 在 Webpack 中不起作用?

    如果你设置hot true in the devServer设置在Webpack 那么模块热更换CSS 有效 并且无需重新加载完整页面即可应用更改 但是当改变HTML文件时 实时重载由于某种原因不起作用 您需要手动刷新页面才能应用更改 If