webpack-HMR-热更新处理JS

JS 模块使用 HMR 注意点

import "./index.less"

对于 css 模块而言, 在 css-loader 中已经帮我们实现了热更新, 只要 css 代码被修改就会立即更新

import copy from "./test.js"

但是对于 js 模块而言, 系统默认并没有给我们实现热更新, 所以修改了 js 模块代码并不会立即更新

如下我写了一个小案例,在 test.js 当中添加了一个函数调用该函数就会生成一个 span 标签并且添加到 body 当中,test.js 内容如下:

function addSpan() {
    let span = document.createElement("span");
    span.innerText = "BNTang";
    document.body.appendChild(span);
}

export default addSpan;

然后在主 js 文件当中进行使用代码如下:

import "../css/index.css"
import addSpan from "./test.js";

let btn = document.createElement("button");
btn.innerText = "添加内容";
document.body.appendChild(btn);

let index = 0;
btn.onclick = function () {
    let p = document.createElement("p");
    p.innerText = "我是第" + index + "个段落";
    index++;
    document.body.appendChild(p);
};

addSpan();

测试:

动画

JS 模块如何实现热更新

手动监听模块变化

image-20211114185741365

// 判断是否开启热更新
if (module.hot) {
    // 监听指定JS模块变化
    module.hot.accept("./test.js", function () {

    });
}

手动编写模块变化后的业务逻辑

image-20211114185757476

if (module.hot) {
    module.hot.accept("./test.js", function () {
        let oSpan = document.querySelector("span");
        document.body.removeChild(oSpan);
        addSpan();
    });
}

测试:

动画

End

posted @   BNTang  阅读(108)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示