首页 > 其他分享 >webpack热更新原理(面试大概率会问)

webpack热更新原理(面试大概率会问)

时间:2022-11-14 13:00:27浏览次数:71  
标签:概率 浏览器 dev server 面试 webpack 模块 js

搭建webpack环境

创建一个项目

mkdir dev-erver && cd dev-server
npm init -y // 快速创建一个项目配置
npm i webpack webpack-dev-server webpack-cli --save-dev
mkdir src // 创建资源目录
mkdir dist // 输出目录
touch webpack.dev.js // 因为是在开发环境需要热更新,所以直接创建dev配置文件

目录结构

image.png

webpack版本

这里说明一下,webpack4和webpack5的配置信息或者显示信息可能有点区别

  "devDependencies": {
    "webpack": "^5.74.0",
    "webpack-cli": "^4.10.0",
    "webpack-dev-server": "^4.9.3"
  }

编写配置文件

// webpack.dev.js

'use strict';

const path = require('path');

module.exports = {
    entry: './src/index.js', // 入口文件
    output: {
        path: path.resolve(__dirname, 'dist'), // 输出到哪个文件夹
        filename: 'output.js' // 输出的文件名
    },
    mode: 'development', // 开发模式
    devServer: {
        // contentBase: path.resolve(__dirname, 'dist')  // contentBase是用来指定被访问html页面所在目录的;
        //但是我本地报错了,使用下面的语句
    static: path.resolve(__dirname, "dist")

    }
};

新建文件

// src/index.js

'use strict' 

document.write('hello world~')

package.json添加一条命令

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack-dev-server --config webpack.dev.js --open"
  },

npm run dev 运行

image.png

我们看到文件已经打包完成了,但是在dist目录里并没有看到文件,这是因为WDS是把编译好的文件放在缓存中,没有放在磁盘上,但是我们是可以访问到的,

output.js 对应你在webpack配置文件中的输出文件,配置的是什么就访问什么

http://localhost:8080/output.js

显然我们想看效果而不是打包后的代码,所以我们在dist目录里创建一个html文件引入即可,

<script src="./output.js"></script>

感受webpack的热更新

内容出来了,我们接下来修改index.js文件,来看下是否可以自动刷新

'use strict' 

document.write('hello world~byebye world')

这确实是热更新,但是这种是每一次修改会重新刷新整个页面,大家可以打开控制台查看。webpack-dev-server 提供了实时重加载的功能,但是不能局部刷新。必须配合后两步的配置才能实现局部刷新,这两步的背后其实是借助了HotModuleReplacementPlugin。

参考webpack视频讲解:进入学习

webpack-dev-server搭配HotModuleReplacementPlugin 实现热更新

我们需要的是,更新修改的模块,但是不要刷新页面。这个时候就需要用到模块热替换。

模块热替换(Hot Module ReplacementHMR)是 webpack 提供的最有用的功能之一。它允许在运行时更新各种模块,而无需进行完全刷新。

特性

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

  • 保留在完全重新加载页面时丢失的应用程序状态。
  • 只更新变更内容,以节省宝贵的开发时间。
  • 调整样式更加快速 - 几乎相当于在浏览器调试器中更改样式。

启用

// webpack.dev.js

const path = require('path');
const webpack = require('webpack'); // 主要多了这一行

module.exports = {
    entry: './src/index.js', // 入口文件
    output: {
        path: path.resolve(__dirname, 'dist'), // 输出到哪个文件夹
        filename: 'output.js' // 输出的文件名
    },
    mode: 'development', // 开发模式
    devServer: {
        // contentBase: path.resolve(__dirname, 'dist')  // contentBase是用来指定被访问html页面所在目录的;但是我本地报错了,使用下面的语句
        static: path.resolve(__dirname, "dist"),
        hot: true // 主要多了这一行

    },
    plugins: [ //  主要多了这一行
        new webpack.HotModuleReplacementPlugin()
    ]
};

我们修改一下文件,形成引用关系

//index.js

import { test } from './page1.js' 

document.write('hello world~1234')

test()
//page1.js

module.exports = {
  test: function () {
    console.log(11111)
  }
}

在入口页index.js面再添加一段

if (module.hot) {
    module.hot.accept();
}

思考

标签:概率,浏览器,dev,server,面试,webpack,模块,js
From: https://www.cnblogs.com/gogo2027/p/16888695.html

相关文章

  • webpack模块化的原理
    commonjs在webpack中既可以书写commonjs模块也可以书写es模块,而且不用考虑浏览器的兼容性问题,我们来分析一下原理。首先搞清楚commonjs模块化的处理方式,简单配置一下webp......
  • 前端部分面试题目整理
    1.<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><script>varname='武老板';functionfunc(){......
  • 面试常考的sql题
    问题:​​sql2000自动增长id,怎样更新重用被删除过的id​​方法:---创建临时表createtable#(idint)---插入10条记录declare@idintset@id=1while@id<=10begininsert......
  • 肖sir__面试第一天课程__项目流程(2)
    项目流程:一、面试官的问法:(1)你们公司的测试流程是什么?(2)给你一个需求你会怎么做?(3)你讲下你的工作?(4)谈谈你们是如何去测试?等回答:1)讲H模型  讲解简化文字流程:内容如......
  • 说说Vue响应式系统中的Watcher和Dep的关系-面试进阶
    引言在这里我先提出两个问题(文章末尾会进行解答):在Vue的数据响应系统中,Dep和Watcher各自分担什么任务?Vue的数据响应系统的核心是Object.defineproperty一定是最好的吗?有......
  • Vue面试题48:你觉得Vuex有什么缺点?(总结自B站up主‘前端杨村长’视频,仅供自用学习)
    体验使用模块:用起来比较繁琐,使用模式也不统一,基本上得不到类型系统的任何支持:conststore=createStore({ modules:{a:moduleA}})store.state.a......
  • 高频react面试题自检
    fetch封装npminstallwhatwg-fetch--save//适配其他浏览器npminstalles6-promiseexportconsthandleResponse=(response)=>{if(response.status===4......
  • 神币概率期望讲课笔记
    一些结论\(n\)个点的有向图从\(1\)走到\(n\)期望时间柿子就是这样子\[f_x=1+\frac{\sumf_v}{in_x}\]“每一刻事件有\(p\)概率发生,问事件发生期望时间”列出......
  • 【剑指Offer学习】【面试题3 :二维数组中的查找】
    思路:规律从右上角开始,或左下开始。不能从左上角开始找,这样每次比较后向右和向下都是越来越大。publicclassP03_FindMaxInMatrix{/*规律从右上角开始:......
  • 概率与期望
    互斥事件:事件A和B的交集为空,A与B就是互斥事件,也叫互不相容事件。也可叙述为:不可能同时发生的事件。如A∩B为不可能事件(A∩B=Φ),那么称事件A与事件B互斥,其含义是:事件A与事......