文件监听
- 文件监听是发现源码发生变化时,自动重新构建出新的输出文件
 webpack开启监听模式,有两种方式
轮询判断文件的最后编辑时间是否发生变化
某个文件发生了变化,并不会立刻告诉监听者,而是缓存起来,等这么久(
aggregateTimeout)// webpack.config.jsmodule.exports = {// 默认false,也就是不开启watch: true,watchOptions: {// 默认为空,不监听的文件或文件夹,支持正则匹配ignored: /node_modules/,// 监听到发生变化后会等300ms后再执行,默认300msaggregateTimeout: 300,// 判断文件是否发生变化,是通过不停询问系统指定文件有没有发生变化实现的,默认每秒访问1000次poll: 100}}
热更新(HMR)
webpack-dev-server(WDS)
- WDS不刷新浏览器
 - WDS不输出文件,而是放在内存中
 - 配合
HotModuleReplacementPlugin插件使用- 插件是webpack内置的
 - 由于js文件默认不能使用热更新,所以要加这个插件
 - 由于
style-loader有热更新的功能,所以hot: true,css文件就热更新了 
 
- 下载包:
npm i webpack-dev-server -Dpackage.json文件中"scripts"加一行,"dev": "webpack-dev-server"- 然后
npm run dev就方便一些 ```javascript // webpack.config.js ‘use strict’; const path = require(‘path’); const webpack = require(‘webpack’) 
 
module.exports = { // 这样设置之后,html才会有热更新 entry: [‘./src/page/index.js’, ‘./src/page/index.html’], plugins: [ new webpack.HotModuleReplacementPlugin() ], // webpack-dev-server devServer: { static: { // 先npm run build出来dist目录 directory: path.join(__dirname, ‘dist’), }, hot: true, // 开启热更新 open: true, }, // development环境下,才能搞 mode: ‘development’, } ```
热更新原理分析
- Webpack Complier:将JS编译成bundle(打包后的JS)
 - HMR Server:将热更新的文件输出给HMR Runtime
 - Bundle Server:提供文件在浏览器访问
 - HMR Runtime:会被注入到浏览器,更新文件的变化
 - bundle.js:编译后输出的文件
 

