詳解webpack的文件監(jiān)聽實(shí)現(xiàn)(熱更新)
前言
文件監(jiān)聽是在源碼發(fā)生變化時(shí),自動(dòng)重新構(gòu)建出新的輸出文件。
webpack 開啟監(jiān)聽模式,有兩種方式:
1.啟動(dòng) webpack 命令時(shí),帶上 --watch 參數(shù)。
唯一缺點(diǎn):需要手動(dòng)刷新才能看到變化;
2.在配置 webpack.config.js 中設(shè)置 watch: true。
優(yōu)點(diǎn):
(1) WDS 不刷新瀏覽器
(2) WDS 不輸出文件,⽽是放在內(nèi)存中
(3) 使⽤用 HotModuleReplacementPlugin 插件
1 第一種方式, --watch
1.1 配置package.json
{ // ... "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build": "webpack", "watch": "webpack --watch" // 新增配置 } // ... }
1.2 到控制臺(tái)輸入 npm run watch
1.3 修改文件,保存后,會(huì)自動(dòng)打包,到瀏覽器刷新,才能看到變化。
1.4 文件監(jiān)聽的原理理分析
輪詢判斷文件的最后編輯時(shí)間是否變化
某個(gè)⽂件發(fā)⽣生了了變化,并不會(huì)⽴刻告訴監(jiān)聽者,⽽是先緩存起來,等 aggregateTimeout
module.export = { //默認(rèn) false,也就是不不開啟 watch: true, //只有開啟監(jiān)聽模式時(shí),watchOptions才有意義 wathcOptions: { //默認(rèn)為空,不監(jiān)聽的文件或者文件夾,支持正則匹配 ignored: /node_modules/, //監(jiān)聽到變化發(fā)生后會(huì)等300ms再去執(zhí)行,默認(rèn)300ms aggregateTimeout: 300, //判斷文件是否發(fā)生變化是通過不停詢問系統(tǒng)指定文件有沒有變化實(shí)現(xiàn)的,默認(rèn)每秒問1000次 poll: 1000 } }
2 第二種方式,在配置 webpack.config.js 中設(shè)置 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" // 新增配置,運(yùn)行 npm run dev 會(huì)自動(dòng)打開瀏覽器 } // ... }
2.2 配置webpack.config.js
'use strict' const path = require('path'); var webpack = require('webpack'); // 引進(jìn) webpack module.exports = { // ... mode:'development', // production 改為開發(fā)環(huán)境,因?yàn)橹挥虚_發(fā)環(huán)境才用到熱更新 module:{ // ... }, plugins:[ new webpack.HotModuleReplacementPlugin() ], devServer:{ contentBase:'./dist', hot: true } }
2.3 到控制臺(tái)運(yùn)行 npm run dev,即可運(yùn)行!
到此這篇關(guān)于詳解webpack的文件監(jiān)聽實(shí)現(xiàn)(熱更新)的文章就介紹到這了,更多相關(guān)webpack 文件監(jiān)聽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js實(shí)現(xiàn)自動(dòng)播放勻速輪播圖
這篇文章主要介紹了js實(shí)現(xiàn)自動(dòng)播放勻速輪播圖,帶勻速運(yùn)動(dòng)函數(shù)封裝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02javascript面向?qū)ο蟪绦蛟O(shè)計(jì)(一)
這篇文章主要介紹了javascript面向?qū)ο蟪绦蛟O(shè)計(jì),分享給大家一段代碼,注釋里講解的非常詳細(xì),有助于我們理解面向?qū)ο?,這里推薦給大家。2015-01-01JavaScript組合模式學(xué)習(xí)要點(diǎn)
組合模式大概是設(shè)計(jì)模式里面使用最為廣泛的模式之一了,模式本身理解起來也比較簡(jiǎn)單,以至于可以毫不費(fèi)力的寫出一個(gè)能用的組合模式偽代碼2016-08-08javascript 復(fù)雜的嵌套環(huán)境中輸出單引號(hào)和雙引號(hào)
如果簡(jiǎn)單的嵌套一般都是外面用雙引號(hào),則里面用單引號(hào),反之亦同,如果特別負(fù)責(zé)的嵌套大家看下如下的方法。2009-05-05js事件監(jiān)聽機(jī)制(事件捕獲)總結(jié)
添加事件的js方法也很多,有直接加到頁(yè)面結(jié)構(gòu)上的,有使用一些js事件監(jiān)聽的方法,由于各個(gè)瀏覽器對(duì)事件冒泡事件監(jiān)聽的機(jī)制不同2014-08-08