在开发过程中,由于html-webpack-plugin和webpack-dev-middleware(webpack-hot-middleware)之间的HMR bug问题,我希望当我的html文件更改时重新加载页面。
以下是我遇到问题的两个存储库,两者都存在问题。
如何使用以下工具重新加载页面?
- Node.js
- Express
- webpack-dev-middleware
在开发过程中,由于html-webpack-plugin和webpack-dev-middleware(webpack-hot-middleware)之间的HMR bug问题,我希望当我的html文件更改时重新加载页面。
以下是我遇到问题的两个存储库,两者都存在问题。
如何使用以下工具重新加载页面?
有几种方法可以从服务器刷新客户端的浏览器。
服务器发送事件:
一种适用于各种浏览器和服务器的简单方法是使用服务器发送事件。最小化的过程为:
var evtSource = new EventSource("<server_URL>/subscribe");
evtSource.onmessage = function () { myPageRefresh() };
GET /subscribe
请求,并跟踪订阅的客户端。const express = require('express');
const app = express();
var client = null;
app.get('/subscribe', (req, res) => {
// send headers to keep connection alive
const headers = {
'Content-Type': 'text/event-stream',
'Connection': 'keep-alive',
'Cache-Control': 'no-cache'
};
res.writeHead(200, headers);
// send client a simple response
res.write('you are subscribed');
// store `res` of client to let us send events at will
client = res;
// listen for client 'close' requests
req.on('close', () => { client = null; }
});
// send refresh event (must start with 'data: ')
function sendRefresh() {
client.write('data: refresh');
}
现在服务器只需调用sendRefresh()
即可随时发送刷新事件。
lite-server:
如果您的开发计算机上本地运行服务器,那么刷新浏览器非常容易。 lite-server是一个模块,每当检测到源文件更改时就会刷新浏览器。非常方便。
\n
,因为它需要一个空行来检测消息是否已完全发送:res.write('you are subscribed\n\n');
和
res.write('data: refresh\n\n');
https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#sending_events_from_the_server - Typhon