此博客是本人从学生时代开始做笔记所用, 部分是工作所遇问题,做填坑笔记,部分闲来查阅资料,加上自己的理解所总结的学习笔记, 常忙得不可开交,若漏了资料来源,望通知~ 前路漫漫,写点东西告诉自己正在一点点进步,而不要迷失于繁忙。

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对应

 

posted @ 2017-12-12 11:35  炎泽  阅读(1916)  评论(0编辑  收藏  举报