详解webpack的文件监听实现(热更新)


Posted in Javascript onSeptember 11, 2020

前言

文件监听是在源码发生变化时,自动重新构建出新的输出文件。
webpack 开启监听模式,有两种方式:

1.启动 webpack 命令时,带上 --watch 参数。
 唯一缺点:需要手动刷新才能看到变化;

2.在配置 webpack.config.js 中设置 watch: true。
 优点:
(1) WDS 不刷新浏览器
(2) WDS 不输出文件,⽽是放在内存中
(3) 使⽤用 HotModuleReplacementPlugin 插件

1 第一种方式, --watch

1.1 配置package.json

{
 // ...
 "scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "build": "webpack",
  "watch": "webpack --watch" // 新增配置
 }
 // ...
}

1.2 到控制台输入 npm run watch

详解webpack的文件监听实现(热更新)

1.3 修改文件,保存后,会自动打包,到浏览器刷新,才能看到变化。

1.4 文件监听的原理理分析

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

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

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

2 第二种方式,在配置 webpack.config.js 中设置 watch: true(热更新:webpack-dev-server)

2.1 配置package.json

{
 // ...
 "scripts": {
  "test": "echo \"Error: no test specified\" && exit 1",
  "build": "webpack",
  "dev": "webpack-dev-server --open" // 新增配置,运行 npm run dev 会自动打开浏览器
 }
 // ...
}

2.2 配置webpack.config.js

'use strict'
 
const path = require('path');
var webpack = require('webpack'); // 引进 webpack
module.exports = {
 // ...
 mode:'development', // production 改为开发环境,因为只有开发环境才用到热更新
 module:{
 // ...
 },
  plugins:[
   new webpack.HotModuleReplacementPlugin()
  ],
  devServer:{
   contentBase:'./dist',
   hot: true
  }
}

2.3 到控制台运行 npm run dev,即可运行!

到此这篇关于详解webpack的文件监听实现(热更新)的文章就介绍到这了,更多相关webpack 文件监听内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
特殊字符、常规符号及其代码对照表
Jun 26 Javascript
jquery固定底网站底部菜单效果
Aug 13 Javascript
Angularjs中UI Router的使用方法
May 14 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
Nov 23 Javascript
在网页中插入百度地图的步骤详解
Dec 02 Javascript
使用JavaScript为一张图片设置备选路径的方法
Jan 04 Javascript
在Vue.js中使用Mixins的方法
Sep 12 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
Oct 25 Javascript
让axios发送表单请求形式的键值对post数据的实例
Aug 11 Javascript
服务端预渲染之Nuxt(使用篇)
Apr 08 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
Apr 10 Javascript
JavaScript cookie原理及使用实例
May 08 Javascript
js代码编写无缝轮播图
Sep 13 #Javascript
vue-cli脚手架的.babelrc文件用法说明
Sep 11 #Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
Sep 11 #Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
Sep 11 #Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
Sep 11 #Javascript
vue界面发送表情的实现代码
Sep 11 #Javascript
在vue中配置不同的代理同时访问不同的后台操作
Sep 11 #Javascript
You might like
php 获取远程网页内容的函数
2009/09/08 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
Jquery选择器 $实现原理
2009/12/02 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
使用命令对象代替switch语句的写法示例
2015/02/28 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
微信小程序 slider 详解及实例代码
2017/01/10 Javascript
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
react router 4.0以上的路由应用详解
2017/09/21 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
基于vue cli 通过命令行传参实现多环境配置
2018/07/12 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
vue使用video插件vue-video-player详解
2020/10/23 Javascript
python使用pyhook监控键盘并实现切换歌曲的功能
2014/07/18 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
Python 判断图像是否读取成功的方法
2019/01/26 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
2019/02/21 Python
python操作文件的参数整理
2019/06/11 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
音乐专业应届生教师求职信
2013/11/04 职场文书
历史专业毕业生的自我鉴定
2013/11/15 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
党员专题组织生活会发言材料
2014/10/17 职场文书
西双版纳导游词
2015/02/03 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
python3 字符串str和bytes相互转换
2022/03/23 Python