什么是模块热替换?

这个功能会在程序运行过程中替换、添加或删除模块,而无需重新加载整个页面

有什么用呢?

  • 保留在完全重新加载页面时丢失的应用程序状态.
  • 只更新变更内容,以节省宝贵的开发时间。

    调整样式更加快速
  • 几乎相当于在浏览器调试器中更改样式。

总而言之,它最主要的速度就是加快开发速度。


启用模块热更新这个功能需要更新webpack-dev-server的配置和使用webpack内置的HMR插件。

例子:

webpack.config.js

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack'); //引入 module.exports = {
entry: {
app: './src/index.js'
},
devtool: 'inline-source-map',
devServer: {
contentBase:'./dist',
hot: true
},
module:{
rules:[
{
test: /\.css$/,
use:['style-loader','css-loader']
}
]
},
plugins:[
new HtmlWebpackPlugin({
title: 'Output Management'
}),
//方便查看修补依赖
new webpack.NamedModulesPlugin(),
//热更新模块
new webpack.HotModuleReplacementPlugin()
],
output:{
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
}
};

同时,也要在index.js中判断热模块更新后做处理:

import _ from 'lodash';
import printMe from './print.js';
import './style.css'; function component(){
var element = document.createElement('div');
var btn = document.createElement('button'); element.innerHTML = _.join(['hello~world','我的家'], ' '); btn.innerHTML = 'Click me and check the console!';
btn.onclick = printMe; element.appendChild(btn); return element;
} let element = component();
document.body.appendChild(element); if(module.hot){
module.hot.accept('./print.js', function(){
console.log('更新后:'); document.body.removeChild(element);
element = component();
document.body.appendChild(element);
})
}

【webpack学习笔记】a05-模块热替换的更多相关文章

  1. Webpack 开发工具与模块热替换

    Webpack 开发工具与模块热替换 ​⚠️ 注意: 永远不要在生产环境中使用这些工具,永远不要. devtool 当 JavaScript 异常抛出时,你常会想知道这个错误发生在哪个文件的哪一行.然 ...

  2. webpack学习_模块热替换(Hot Module Peaplacement)

    模块热替换(Hot Module Replacement 或 HMR) 是webpack提供的最有用的功能之一.允许在u女性是更新各种模块,而无需进行完全刷新. 启用HMR 承接之前的代码 webpa ...

  3. webpack学习之—— 模块热替换(Hot Module Replacement)

    模块热替换(HMR - Hot Module Replacement)功能会在应用程序运行过程中替换.添加或删除模块,而无需重新加载整个页面.主要是通过以下几种方式,来显著加快开发速度: 保留在完全重 ...

  4. 【webpack】-- 模块热替换

    全称是Hot Module ReplaceMent(HMR),理解成热模块替换或者模块热替换都可以吧,和.net中的热插拔一个意思,就是在运行中对程序的模块进行更新.这个功能主要是用于开发过程中,对生 ...

  5. 启用 webpack 的模块热替换特性

    启用 webpack 的模块热替换特性: module.exports = { //... devServer: { hot: true } } 注意,必须有 webpack.HotModuleRep ...

  6. webpack 模块热替换的理解和使用

    模块热替换(webpack文档上也叫 Hot Module Replacement 或 HMR)是 webpack 提供的最有用的功能之一.它允许在运行时更新各种模块,而无需进行完全刷新. 这句话其实 ...

  7. Webpack探索【8】--- 模块热替换详解

    本文主要讲模块热替换相关内容.

  8. 【webpack学习笔记】a06-生产环境和开发环境配置

    生产环境和开发环境的配置目标不一样,生产环境主要是让文件压缩得更小,更优化资源,改善加载时间. 而开发环境,主要是要开发更方便,更节省时间,比如调试比如自动刷新. 所以可以分开配置不同的开发环境,然后 ...

  9. webpack学习笔记--整体配置结构

    之前的章节分别讲述了每个配置项的具体含义,但没有描述它们所处的位置和数据结构,下面通过一份代码来描述清楚: const path = require('path'); module.exports = ...

随机推荐

  1. SpringBoot Tomcat启动报错

    中间的桥梁就是下面这个依赖 <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over ...

  2. ImportFileHandler 附件上传

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using LitJson; ...

  3. XP下 无法定位程序输入点WSAPoll于动态链接库ws2_32.dll 的解决办法

    最近在给手机启用黑阈服务的时候出现了无法定位程序输入点WSAPoll于动态链接库ws2_32.dll这个错误,上网查了一下是因为SDK Platform Tools版本过高不能兼容windows xp ...

  4. Arthas:线上问题排查工具

    安装 下载 java -jar arthas-boot.jar 查看版本: D:\Program Files\arthas $ java -jar arthas-boot.jar -version [ ...

  5. Complex类的设计与改进

    Complex类 源码 #include <cmath> #include <iomanip> #include <iostream> #include <s ...

  6. js清除childNodes中的#text(选项卡中会用到获取第一级子元素)

    我们一般为了代码整洁代码都会换行,如上面所述. 获取div1节点下的childNodes var div = document.getElementById('div1') var child = d ...

  7. Vue小项目二手书商城:(一)准备工作、组件和路由

    本项目基于vue2.5.2,与低版本部分不同之处会在(五)参考资料中提出 完整程序:https://github.com/M-M-Monica/bukesi 实现内容: 资源准备(mock数据) 组件 ...

  8. curl的Get请求,封装方法

    //GET请求//参数1是请求的url//参数2是发送的数据的数组//参数3是其他GET选项private function curlGET($url, array $get = array(), a ...

  9. DAY 17常用模块

    一.时间模块:time 1.时间戳:time.time() # 可以作为数据的唯一标识 print(time.time) # 1554878849.8452318 2.延迟线程的运行:time.sle ...

  10. 2 - Binary Search & LogN Algorithm - Apr 18

    38. Search a 2D Matrix II https://www.lintcode.com/problem/search-a-2d-matrix-ii/description?_from=l ...