webpack热替换原理

Posted 炎泽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack热替换原理相关的知识,希望对你有一定的参考价值。

前期准备:

const path = require(\'path\');
const htmlWebpackPlugin= require(\'html-webpack-plugin\');
const CleanWebpackPlugin = require(\'clean-webpack-plugin\')
var ManifestPlugin = require(\'webpack-manifest-plugin\');
const webpack= require(\'webpack\');

module.exports = {
  entry: {
    main: \'./src/main.js\'
  },
  devServer: {
      historyApiFallback: true,
    contentBase: \'./dist\'
  },
  module: {
      rules: [
      {
          test: /\\.css$/,
          use: [\'style-loader\', \'css-loader\']
      },{
            test: /\\.(png|jpg|gif|svg)$/,
            //loader是use[{loader}]的简写
        loader: \'file-loader\',
        options: {
              name: \'[name].[ext]?[hash]\'
        }
    },{
        test: /\\.vue$/,
        loader: \'vue-loader\',
        options: {
              loaders: {
            \'scss\': \'vue-style-loader!css-loader!sass-loader\',
            \'sass\': \'vue-style-loader!css-loader!sass-loader?indentedSyntax\',
              }
              // other vue-loader options go here
        }
      }
      ]
  },
  devtool: \'inline-source-map\',
  output: {
      //非覆盖更新
    filename: \'[name].js\',
    path: path.resolve(__dirname, \'dist\'),
    publicPath: \'/a/\'
    },
};
View Code
import chunk1 from \'./chunk1\'
import chunk2 from \'./chunk2\'
import aa from \'./aa.css\'

var jquery =require(\'jquery\')
var angular =require(\'angular\')
console.log(333)
document.onclick= function(){
    console.log(aa)
}
console.log(jquery(\'body\'))
console.log(angular)


if(module.hot){
    module.hot.accept(\'./chunk1.js\');
}
View Code
var chunk1=2;
var a= 12399
exports.chunk1=chunk1;
View Code

 

让我们先进行一次热加载:修改chunk1.js,将a的值改为123

此时,webpack会生成两份文件,如下图:

分别是chunkNumber+previousHash+hot-update.json和chunkNumber+previousHash+hot-update.js

previousHash上一次生成的hash值(每一次构建都会生成一个hash值)

这些文件处于内存中,因此我们在浏览器内查看具体内容:

hot-update.json:

解析:

h(hash)当前生成的hash值, c(chunkHash) 发生变更的module的编号,chunk1的编号是0

hot-update.js:

 

webpackHotUpdate函数的三个参数分别为: 对编号为0的module进行更新,更新module的编号,及新内容

 

浏览器控制台输出:

5即更新module的编号,与webpackHotUpdate对应

 

以上是关于webpack热替换原理的主要内容,如果未能解决你的问题,请参考以下文章

服务器代码中的 Webpack 热模块替换

webpack热替换心得

本地 ES 模块(浏览器或 Node.js)的热模块替换*没有* Webpack?没有构建工具

webpack 热更新

ik分词器热更新原理

webpack4.41.0配置四(热替换)