详解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 相关文章推荐
基于jQuery实现点击同时更改两个iframe的网址
Jul 01 Javascript
javascript陷阱 一不小心你就中招了(字符运算)
Nov 10 Javascript
jquery 通过name快速取值示例
Jan 24 Javascript
jquery判断至少有一个checkbox被选中的方法
Jun 05 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
Dec 28 Javascript
详解JavaScript中的构造器Constructor模式
Jan 14 Javascript
JavaScript提高网站性能优化的建议(二)
Jul 24 Javascript
vue.js 获取当前自定义属性值
Jun 01 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
Jul 31 Javascript
详解React Native开源时间日期选择器组件(react-native-datetime)
Sep 13 Javascript
Vue 实现登录界面验证码功能
Jan 03 Javascript
微信小程序:报错(in promise) MiniProgramError
Oct 30 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/30 PHP
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
2015/05/13 PHP
学习php设计模式 php实现建造者模式
2015/12/07 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
laravel 如何实现引入自己的函数或类库
2019/10/15 PHP
JS 面向对象之神奇的prototype
2011/02/26 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
javascript实现微信分享
2014/12/23 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
2014/12/29 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
vue拦截器实现统一token,并兼容IE9验证功能
2018/04/26 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
CSS3 渐变(Gradients)之CSS3 线性渐变
2016/07/08 HTML / CSS
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
JAVA和C++的区别
2013/10/06 面试题
什么是makefile? 如何编写makefile?
2013/01/02 面试题
中考冲刺决心书
2014/03/11 职场文书
工程安全生产协议书
2014/11/21 职场文书
爱心募捐感谢信
2015/01/22 职场文书
在职证明格式样本
2015/06/15 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
检讨书格式
2019/04/25 职场文书
MySQL数据库 安全管理
2022/05/06 MySQL
JS实现九宫格拼图游戏
2022/06/28 Javascript