Wsh's blog Wsh's blog
首页
  • 基础知识
  • ArkUI
  • UIAbility
  • 组件通信方式
  • 前端缓存
  • React
  • typescript
  • javascript
  • flutter
  • node
  • webpack
web3D😉
宝库📰
  • 分类
  • 标签
  • 归档
龙哥的大🐂之路 (opens new window)
GitHub (opens new window)

wsh

热爱前端的程序媛
首页
  • 基础知识
  • ArkUI
  • UIAbility
  • 组件通信方式
  • 前端缓存
  • React
  • typescript
  • javascript
  • flutter
  • node
  • webpack
web3D😉
宝库📰
  • 分类
  • 标签
  • 归档
龙哥的大🐂之路 (opens new window)
GitHub (opens new window)
  • 主要功能
  • 核心概念
  • tree shaking
  • 模块联邦
  • 热更新机制
    • 构建速度和体积优化
    • 打包原理
    • 自定义plugin/loader
    • webpack
    2022-05-28
    目录

    热更新机制

    # 01. ⽂件监听使⽤(watch)

    轮询判断⽂件的最后编辑时间是否变化

    某个⽂件发⽣了变化,并不会⽴刻告诉监听者,⽽是先缓存起来,等 aggregateTimeout

    module.export = {
    //默认 false,也就是不开启
    watch: true,
    //只有开启监听模式时,watchOptions才有意义
    wathcOptions: {
    //默认为空,不监听的文件或者文件夹,支持正则匹配
    ignored: /node_modules/,
    //监听到变化发生后会等300ms再去执行,默认300ms
    aggregateTimeout: 300,
    //判断文件是否发生变化是通过不停询问系统指定文件有没有变化实现的,默认每秒问1000次
    poll: 1000
    }
    }
    

    # 02. 热更新

    • webpack-dev-server

    WDS 不刷新浏览器

    WDS 不输出⽂件,⽽是放在内存中

    使⽤ HotModuleReplacementPlugin插件

    
    "name": "hello-webpack",
    "version": "1.0.0",
    "description": "Hello webpack",
    "main": "index.js",
    "scripts": {
    "build": "webpack ",
    + ”dev": "webpack-dev-server --open"
    },
    "keywords": [],
    "author": "",
    "license": "ISC"
    }
    
    • webpack-dev-middleware

    WDM 将 webpack 输出的⽂件传输给服务器 适⽤于灵活的定制场景

    const express = require('express');
    const webpack = require('webpack');
    const webpackDevMiddleware = require('webpack-devmiddleware');
    const app = express();
    const config = require('./webpack.config.js');
    const compiler = webpack(config);
    app.use(webpackDevMiddleware(compiler, {
    publicPath: config.output.publicPath
    }));
    app.listen(3000, function () {
    console.log('Example app listening on port 3000!\n');
    });
    

    webpack-dev-server只负责启动服务和前置准备工作,所有文件相关的操作都抽离到webpack-dev-middleware库了,主要是本地文件的编译和输出以及监听.

    # 03. 热更新的原理分析

    • Webpack Compile: 将 JS 编译成 Bundle
    • HMR Server: 将热更新的⽂件输出给 HMR Rumtime
    • Bundle server: 提供⽂件在浏览器的访问。正常一般访问文件是以文件目录的形式访问,Bundle server是以服务器的形式访问, 比如:localhost:8080/bundle.js 形式访问。
    • HMR Rumtime: 会被注⼊到浏览器的bundle.js 文件中,浏览器上的bundle.js 与服务器建立链接,通常这个链接是一个websocket,,更新⽂件的变化
    • bundle.js: 构建输出的⽂件

    # 热更新的过程

    #webpack
    模块联邦
    构建速度和体积优化

    ← 模块联邦 构建速度和体积优化→

    最近更新
    01
    组件通信方式
    01-07
    02
    UIAbility
    01-07
    03
    ATKTS
    01-06
    更多文章>
    Theme by Vdoing | Copyright © 2022-2025 Wsh | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式