前期准备:
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.οnclick= 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= 12399exports.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对应