18.webpack4之HMR

article/2025/10/7 13:03:59

1.HMR(Hot Module Replacement)热模块替换

在开发环境,可以使用热模块替换(HMR)去实现如果一个模块发生变化,只会重新打包这一个模块(而不是所有模块都进行打包),而无需重新加载整个页面。

生产环境不需要使用HMR

作用:极大提高构建速度

样式文件、js文件使用HMR功能:

        样式文件:style-loader自带HMR功能

        js文件:

                默认不能使用HMR功能 --> 需要修改js代码,添加支持HMR功能的代码,可以在入

                口文件添加如下代码,配置需要监听的js代码文件

if(module.hot) {// 一旦module.hot为true,说明开启了HMR功能。 --> 让HMR功能代码生效module.hot.accept("./print.js", function() {// 方法会监听print.js文件的变化,一旦发生变化,其他模块默认不会重新打包构建。// 会执行后面的回调函数print()})
}

        html文件:默认不能使用HMR功能,同时会导致问题:html文件不能热更新。但html文

        件不需要使用HMR功能,因为只有一个html文件

2.相关代码段文件

1)相关代码文件

2)webpack.config.js

/*** HMR: hot module replacement 热模块替换 / 模块热替换*  作用:一个模块发生变化,只会重新打包这一个模块(而不是打包所有模块)*      极大提升构建速度*      *      样式文件:可以使用HMR功能:因为style-loader内部实现了*          开发环境使用style-loader,HMR功能可以让性能更好,打包速度更快;*          生产环境使用mini-css-extract-plugin*      js文件:默认不能使用HMR功能 -->  需要修改js代码,添加支持HMR功能的代码*          只能处理入口js文件*      html文件:默认不能使用HMR功能,同时会导致问题:html文件不能热更新了~(不用做HMR功能,因为只有一个html文件)*          解决:修改entry入口,将html文件引入*      */const { resolve } = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin")
/*** webpack.config.js webpack的配置文件* 默认只能处理js和json文件,html、css、图片、文字需要另外引入loader* 作用:指示webpack 干哪些活(当运行webpack指令时,会加载里面的配置)* 所有构建工具都是基于nodejs平台运行的,模块化默认采用commonjs** 运行项目指令:*  webpack 会将打包结果输出出去*  npx webpack-dev-server只会在内存中编译打包,没有输出*/
module.exports = {// 配置webpack入口起点entry: ["./src/js/index.js","./src/index.html"],output: {// 配置输出文件名filename: "js/built.js",// 配置输出文件路径path: resolve(__dirname,"build")},module: {rules: [// 打包样式资源// loader的配置// less{// 匹配哪些文件test: /\.less/,use: ["style-loader","css-loader",// 需要下载less和less-loader"less-loader"]},]},// plugins的配置plugins: [// html-webpack-plugin// 功能:默认会创建一个空的html,自动引入打包输出的所有资源(JS/CSS)// 需求:需要有结构的HTML文件new HtmlWebpackPlugin({// 复制一个HTML文件,并自动引入打包输出的所有资源(JS/CSS)template: "./src/index.html"})],// 配置开发服务器 devServer: 用来自动化(自动编译、自动打开浏览器、自动刷新浏览器)// 特点:只会在内存中编译打包,本地代码不会有任何输出// 运行的指令如果是webpack、会有输出。运行的指令如果是npx,则不会有输出// 启动devServer指令为:npx webpack-dev-serverdevServer: {// 要运行的项目的路径(指构建后的目录)// contentBase在webpack5中已经废弃,而使用static替代// static: resolve(__dirname,"build"),contentBase: resolve(__dirname,"build"),// 启动gzip压缩compress: true,// 开发服务器端口号port: 3000,// 自动打开浏览器open: true,// 开启HMR功能// 当修改了webpack配置,新配置想要生效,必须重启webpack服务hot: true},mode: "development"
}

3)index.js

// 引入 iconfont 样式文件
import print from "./print.js";
import '../css/index.less';console.log("index.js文件被")function add(x,y) {return x + y;
}
console.log(add(1,2));if(module.hot) {// 一旦module.hot为true,说明开启了HMR功能。 --> 让HMR功能代码生效module.hot.accept("./print.js", function() {// 方法会监听print.js文件的变化,一旦发生变化,其他模块默认不会重新打包构建。// 会执行后面的回调函数print()})
}

4)print.js

console.log("print.js")
function print() {const content = 'hello print';console.log(content);console.log("123")
}
export default print

5)index.less

#box1 {width: 100px;height: 100px;background-repeat: no-repeat;background-size: 100% 100%;background-color: pink;
}#box2 {width: 200px;height: 200px;background-repeat: no-repeat;background-size: 100% 100%;background-color: skyblue;
}#box3 {width: 300px;height: 300px;// background-image: url('../imgs/angular.jpg');background-repeat: no-repeat;background-size: 100% 100%;background-color: yellowgreen;
}#title {color: #fff;
}

执行:npx webpack-dev-server启动,修改print.js文件和css文件可以看到相应效果


http://chatgpt.dhexx.cn/article/hGffqUeH.shtml

相关文章

webpack5之HMR原理探究

一、概念介绍 模块热替换(hot module replacement 或 HMR)是 webpack 提供的最有用的功能之一。它允许在运行时更新所有类型的模块,而无需完全刷新。 主要是通过以下几种方式,来显著加快开发速度: 保留在完全重新加载页面期间丢失的应用程…

hmr webpack 不编译_一文搞懂 webpack HMR 原理

关注「前端向后」微信公众号,你将收获一系列「用心原创」的高质量技术文章,主题包括但不限于前端、Node.js以及服务端技术 一.HMR Hot Module Replacement(HMR)特性最早由 webpack 提供,能够对运行时的 JavaScript 模块进行热更新(无需重刷&a…

Webpack HMR 原理全解析

执行 npx webpack serve 命令后,WDS 调用 HotModuleReplacementPlugin 插件向应用的主 Chunk 注入一系列 HMR Runtime,包括: 用于建立 WebSocket 连接,处理 hash 等消息的运行时代码 用于加载热更新资源的 RuntimeGlobals.hmrDow…

vite1.x 热更新(HMR)的实现原理

前言 将近一年前自己尝试阅读vite源码(2.x),虽然也有些收获但整体并没有到达我的预期,对于vite也是停留在一知半解的程度上。最近想重新开始学习vite,但回顾之前的学习历程,感觉不太想继续之前的方式&…

Webpack HMR 原理解析

Hot Module Replacement(以下简称 HMR)是 webpack 发展至今引入的最令人兴奋的特性之一 ,当你对代码进行修改并保存后,webpack 将对代码重新打包,并将新的模块发送到浏览器端,浏览器通过新的模块替换老的模…

Webpack的HMR原理解析

Hot Module Replacement(以下简称 HMR)是 webpack 发展至今引入的最令人兴奋的特性之一 ,当你对代码进行修改并保存后,webpack 将对代码重新打包,并将新的模块发送到浏览器端,浏览器通过新的模块替换老的模…

Esbuild Bundler HMR

Esbuild 虽然 bundler 非常快,但是其没有提供 HMR 的能力,在开发过程中只能采用 live-reload 的方案,一有代码改动,页面就需要全量 reload ,这极大降低开发体验。为此添加 HMR 功能至关重要。 经过调研,社…

Vite HMR

传统webpack的hmr是使用webpack的HotModuleReplacementPlugin,而vite则是采用native ES Module的devServer。 初始化本地服务器加载并运行对应的plugin 最重要的一件事就是运行plugin,目前vite支持的plugin大体如下图所示 1、建立ViteDevServer服务器…

webpack HMR

HMR或者hot模式下,启动webpack会在浏览器与服务器之间会建立一个websocket连接,使得浏览器可以和服务端建立全双工通信;当应用程序的代码更新时,会要求HMR runtime检查更新,有更新时,在websoket连接中会返回…

webpack中的HMR(热更新)原理剖析

简介 Hot Module Replacement(以下简称 HMR)是 webpack 发展至今引入的最令人兴奋的特性之一 ,当你对代码进行修改并保存后,webpack 将对代码重新打包,并将新的模块发送到浏览器端,浏览器通过新的模块替换…

HMR(热替换)

HMR 即模块热替换(hot module replacement)的简称,它可以在应用运行的时候,不需要刷新页面,就可以直接替换、增删模块。webpack 可以通过配置 webpack.HotModuleReplacementPlugin 插件来开启全局的 HMR 能力&#xff…

面试官:说说Webpack的热更新是如何做到的?原理是什么?

一、是什么 HMR全称 Hot Module Replacement,可以理解为模块热替换,指在应用程序运行过程中,替换、添加、删除模块,而无需重新刷新整个应用 例如,我们在应用运行过程中修改了某个模块,通过自动刷新会导致整…

Webpack 热更新HMR 原理全解析

一、什么是 HMR HMR 全称 Hot Module Replacement,中文语境通常翻译为模块热更新,它能够在保持页面状态的情况下动态替换资源模块,提供丝滑顺畅的 Web 页面开发体验。 HMR 最初由 Webpack 设计实现,至今已几乎成为现代工程化工具…

curl.perform() pycurl.error: (23, 'Failed writing body (0 != 59)')

在使用python3.7编码时,引入pycurl模块和StringIO模块后,容易引起上述错误 导入StringIO模块的解决方案: 只有在python2中才能导入StringIO模块,直接 from StringIO import StringIO 即可 但是python3,STringIO和…

关于python的url处理

基本环境: python2.7 1 完整的url语法格式: 协议://用户名密码:子域名.域名.顶级域名:端口号/目录/文件名.文件后缀?参数值#标识 2 urlparse模块对url的处理方法 urlparse模块对url的主要处理方法有:urljoin/urlsplit/urlunsplit/urlpar…

windows10+python3.7使用pip安装pycurl失败

使用pip install pycurl安装pycurl失败: python setup.py egg_info did not run successfully. 可以单独下载pycurl依赖文件然后安装 sArchived: Python Extension Packages for Windows - Christoph Gohlke (uci.edu) 选择Python对应版本的文件进行下载&#xff0…

Pycurl介绍

pycurl — A Python interface to the cURL library Pycurl包是一个libcurl的Python接口.pycurl已经成功的在Python2.2到Python2.5版编译测试过了. Libcurl是一个支持FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 和 LDAP的客户端URL传输库.libcurl也支持HTTPS认证,H…

[windows]python 安装pycurl

问题描述 pip install pycurl 报错 手动安装 下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/ 页面搜索: pycurl 下载对应版本的whl文件,我是windows环境 python3.8 所以下载pycurl-7.45.1-cp38-cp38-win32.whl 安装:…

Python实用模块之pycurl

软硬件环境 ubuntu 19.04 64bitanaconda3 with python 3.7.3pycurl 7.43.0.2 简介 CURL是一个基于URL进行数据传输的命令行工具,使用C语言编写,支持http,https,ftp,telnet,file,ldap等常见网络传…

ipcs -a

消息队列、共享内存、信号量