📜  电子热重载 - Javascript (1)

📅  最后修改于: 2023-12-03 15:40:57.093000             🧑  作者: Mango

电子热重载 - Javascript

电子热重载是一种常用的前端技术,可以在开发中自动重载页面,提高开发效率。本文将介绍如何使用 Javascript 实现电子热重载。

实现原理

实现电子热重载的核心原理是通过 WebSocket 建立客户端和服务器之间的长连接,并通过监听文件变化来实现自动刷新页面。

服务器端代码主要负责监听文件变化,并向客户端推送文件变化信息,客户端通过接收文件变化信息来触发页面重载。

实现步骤
1. 安装依赖

本文使用了 wschokidar 两个 npm 包,先通过 npm 安装:

npm install ws chokidar --save-dev
2. 服务器端代码

服务器端代码需要监听文件变化,并向客户端推送变化信息。

const WebSocket = require('ws')
const chokidar = require('chokidar')

const wss = new WebSocket.Server({ port: 8080 })

// 创建文件监视器
const watcher = chokidar.watch('./src')

watcher.on('ready', () => {
  console.log('Watching for file changes...')

  watcher.on('all', (event, path) => {
    console.log(`File ${path} ${event}`)
    // 推送文件变化信息到客户端
    wss.clients.forEach((client) => {
      if (client.readyState === WebSocket.OPEN) {
        client.send('reload')
      }
    })
  })
})
3. 客户端代码

客户端需要通过 WebSocket 建立长连接,并监听文件变化信息来触发页面重载。

const ws = new WebSocket('ws://localhost:8080')

ws.onmessage = (event) => {
  if (event.data === 'reload') {
    // 刷新页面
    location.reload()
  }
}

ws.onclose = () => {
  console.log('Connection closed, trying to reconnect...')
  // 连接关闭后尝试重新连接
  setTimeout(() => {
    connect()
  }, 5000)
}

function connect () {
  const ws = new WebSocket('ws://localhost:8080')

  ws.onopen = () => {
    console.log('Connected to server.')
  }

  ws.onmessage = (event) => {
    if (event.data === 'reload') {
      // 刷新页面
      location.reload()
    }
  }

  ws.onclose = () => {
    console.log('Connection closed, trying to reconnect...')
    // 连接关闭后尝试重新连接
    setTimeout(() => {
      connect()
    }, 5000)
  }
}

connect()
4. 启动服务器

最后启动服务器,就可以开始使用电子热重载了。

node server.js
结语

本文介绍了如何使用 Javascript 实现电子热重载,通过监听文件变化和 WebSocket 消息推送来自动重载页面,提高开发效率。