详解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 相关文章推荐
QQ邮箱的一个文本编辑器代码
Mar 14 Javascript
鼠标经过显示二级菜单js特效
Aug 13 Javascript
js编写一个简单的产品放大效果代码
Jun 27 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
Jul 19 Javascript
详解AngularJs中$resource和restfu服务端数据交互
Sep 21 Javascript
angularjs手动识别字符串中的换行符方法
Oct 02 Javascript
微信小程序通过js实现瀑布流布局详解
Aug 28 Javascript
基于Vue实现微前端的示例代码
Apr 24 Javascript
微信小程序picker组件两列关联使用方式
Oct 27 Javascript
如何使用 vue-cli 创建模板项目
Nov 19 Vue.js
JavaScript实现鼠标移入随机变换颜色
Nov 24 Javascript
vue 中this.$set 动态绑定数据的案例讲解
Jan 29 Vue.js
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
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
PHP 八种基本的数据类型小结
2011/06/01 PHP
php中mysql模块部分功能的简单封装
2011/09/30 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
悬浮数字的实现案例
2014/02/19 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
js倒计时抢购实例
2015/12/20 Javascript
jQuery遍历json的方法分析
2016/04/16 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
JavaScript从原型到原型链深入理解
2019/06/03 Javascript
js实现随机点名程序
2020/09/17 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
Javascript实现秒表计时游戏
2020/05/27 Javascript
Python中的Django基本命令实例详解
2018/07/15 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
Django框架模板的使用方法示例
2019/05/25 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
简单了解Django项目应用创建过程
2020/07/06 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
马来西亚网上购物:Youbeli
2018/03/30 全球购物
西班牙香水和化妆品购物网站:Arenal Perfumerías
2019/03/01 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
高中生打架检讨书1000字
2015/02/17 职场文书
预备党员入党感想
2015/08/10 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
教你怎么用python实现字符串转日期
2021/05/24 Python
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android