详解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 相关文章推荐
csdn 论坛技术区平均给分功能
Nov 07 Javascript
jQuery中extend()和fn.extend()方法详解
Jun 03 Javascript
JavaScript中循环遍历Array与Map的方法小结
Mar 12 Javascript
原生javascript实现的一个简单动画效果
Mar 30 Javascript
好好了解一下Cookie(强烈推荐)
Jun 14 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
Dec 23 Javascript
webpack多页面开发实践
Dec 18 Javascript
轻松学习JavaScript函数中的 Rest 参数
May 30 Javascript
webpack的tree shaking的实现方法
Sep 18 Javascript
浅析Vue 防抖与节流的使用
Nov 14 Javascript
JQuery复选框全选效果如何实现
May 08 jQuery
基于VUE实现判断设备是PC还是移动端
Jul 03 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源代码数组统计count分析
2011/08/02 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
php实现的中文分词类完整实例
2017/02/06 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
PDO::getAttribute讲解
2019/01/28 PHP
PHP框架实现WebSocket在线聊天通讯系统
2019/11/21 PHP
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
JavaScript 面向对象与原型
2015/04/10 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
Vue 表单控件绑定的实现示例
2017/08/11 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
python实现电子词典
2020/04/23 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
python中redis的安装和使用
2016/12/04 Python
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
Python实现利用163邮箱远程关电脑脚本
2018/02/22 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
大专计算机个人求职的自我评价
2013/10/21 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
大学生入党积极分子党校学习思想汇报
2014/10/25 职场文书
2014年爱国卫生工作总结
2014/11/22 职场文书
2014年后备干部工作总结
2014/12/08 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android
Mysql查询时间区间日期列表,不会由于数据表数据影响
2022/04/19 MySQL