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文件可以看到相应效果

18.webpack4之HMR相关推荐

  1. webpack4.0核心概念(十)—— HMR(热模块替换-局部刷新)

    HMR:当修改一个js或者css的时候,只刷新修改的内容,不进行整个页面的刷新. css的HMR--只支持开发环境 不能使用mini-css-extract-plugin需要使用style-loade ...

  2. 趁webpack5还没出,先升级成webpack4吧

    上一次将webpack1升级到3,也仅是 半年前,前端工具发展变化太快了,如今webpack4已经灰常稳定,传说性能提升非常高,值得升级. 一直用着的webpack3越来越慢,一分多钟的编译时间简直不 ...

  3. webpack4 module federation

    module-federation是webpack5更新的一项新特性, 可以更容易的共享前端代码, 本文将介绍@module-federation/webpack-4实现原理及其与webpack5的差 ...

  4. roadhog迁移成webpack4问题整理

    [webpack-cli] Error: Cannot find module 'object.getownpropertydescriptors' 可能是webpack-cli版本的问题,我的项目是 ...

  5. webpack4.0打包优化策略(二)

    打包优化策略 webpack4.0打包优化策略(一) webpack4.0打包优化策略(二) webpack4.0打包优化策略(三) 区分开发和生产环境 通常我们在开发网页时需要区分构建环境 开发环境 ...

  6. webpack4.x最详细入门讲解

    前言 本文主要从webpack4.x入手,会对平时常用的Webpack配置一一讲解,各个功能点都有对应的详细例子,所以本文也比较长,但如果你能动手跟着本文中的例子完整写一次,相信你会觉得Webpack ...

  7. webpack4 入门配置研究

    1. 全局安装 npm install webpack webpack-cli webpack-dev-server -g 1.1)输密文的密码(电脑开机) 1.2)安装成功 2. 输入命令mkdir ...

  8. 陈潇冰php,webpack4.x入门到进阶

    课程详情(本课程所涉及内容) 1. webpack是什么?webpack的作用 2. webpack的整体构成 3. webpack-cli.package.json 4. 开发环境(developm ...

  9. webpack4配置vue环境和一些小坑。

    初始化一些文件和依赖 新建一个testwebpack的文件夹.  然后在该文件夹下: npm init 1 这时候会出现一个pack.json文件. npm i webpack vue vue-loa ...

最新文章

  1. 带你深入理解图灵机--天才所在的时代
  2. python文字冒险游戏_模拟射击文字类游戏(Python)
  3. ubuntu14.04 安装 bcm43142无线网卡
  4. Primality Test 素数,打表
  5. windows下hadoop的单机伪分布式部署(3)
  6. android 滚动画画,Android利用ViewPager实现可滑动放大缩小画廊效果
  7. 负数如何归一化处理_机器学习之数据预处理
  8. git flow 命名规范 驼峰_图解ThinkPHP5框架(一):基础知识,开发规范与目录结构
  9. oracle之三闪回flashback
  10. java.io.StreamCorruptedException: invalid stream header: 00000000
  11. php基础--变量及作用域
  12. js爬取网页文字图片 html爬取网页信息
  13. Python3 PDF转图片
  14. Eclipse 使用中一些好用的快捷键
  15. 我的世界服务器神秘修改节点,我的世界NBT指令修改神秘时代4MOD方法详解
  16. 云通讯im怎么做php回调,腾讯云通讯IMSDK
  17. AMD Xilinx官网由于合规性不通过导致无法下载软件原因及解决办法
  18. STM8L低功耗设置,深坑。。。
  19. Win10 解决电脑重启后 需重新设置双网卡共享问题
  20. 济南SEO推荐高质量外链时代的到来

热门文章

  1. 市面上降噪最好的蓝牙耳机,618必备降噪蓝牙耳机推荐
  2. Cadence PCB仿真使用Allegro PCB SI生成串扰总结报告Crosstalk Summary Report及报告导读图文教程
  3. IA64Linux内核,关于amd64和ia64的理解
  4. 2021年安全员-C证报名考试及安全员-C证模拟考试题库
  5. Gradle安装配置
  6. Hanoi塔问题的递归算法与非递归算法
  7. TDL3 Source Code
  8. 服务器无法用u盘安装系统安装win7系统,服务器u盘安装win7系统
  9. 基于 猫冬的 jQuery formValidator表单验证 的asp.net 控件
  10. OpenTSDB 查询数据