Open yanlele opened 1 week ago
<script src="main.js"></script>
<script src="main.js?v=2"></script>
v=2
html - webpack - plugin
const HtmlWebpackPlugin = require("html - webpack - plugin"); const webpack = require("webpack"); const path = require("path"); module.exports = { entry: "./src/index.js", output: { filename: "main.js", path: path.resolve(__dirname, "dist"), }, plugins: [ new HtmlWebpackPlugin({ template: "index.html", // 自定义版本号,这里可以通过读取文件系统中的版本文件或者其他方式来获取真实的版本号 version: "2", }), new webpack.BannerPlugin("版权所有,翻版必究"), ], };
HtmlWebpackPlugin
if ("serviceWorker" in navigator) { navigator.serviceWorker .register("service - worker.js") .then(function (registration) { console.log("Service Worker注册成功"); }) .catch(function (error) { console.log("Service Worker注册失败: ", error); }); }
service - worker.js
self.addEventListener("fetch", function (event) { event.respondWith( caches.match(event.request).then(function (response) { if (response) { return response; } return fetch(event.request); }) ); }); self.addEventListener("activate", function (event) { var cacheWhitelist = ["v2 - cache"]; event.waitUntil( caches.keys().then(function (cacheNames) { return Promise.all( cacheNames.map(function (cacheName) { if (cacheWhitelist.indexOf(cacheName) === -1) { return caches.delete(cacheName); } }) ); }) ); });
activate
cacheWhitelist
fetch
ws
const WebSocket = require("ws"); const wss = new WebSocket.Server({ port: 8080 }); wss.on("connection", function connection(ws) { console.log("客户端已连接"); // 当项目更新时,发送更新通知 ws.send("update"); });
const socket = new WebSocket("ws://localhost:8080"); socket.addEventListener("message", function (event) { if (event.data === "update") { location.reload(); } });
<script src="main.js"></script>
。更新后,可以将其改为<script src="main.js?v=2"></script>
,其中v=2
是版本号。每次更新项目时,递增这个版本号。html - webpack - plugin
插件结合版本控制工具来自动更新版本号。假设你有一个简单的 Webpack 配置文件,如下:HtmlWebpackPlugin
插件可以将版本号插入到 HTML 文件中引用的静态资源 URL 中。service - worker.js
文件中编写缓存管理逻辑。例如,以下是一个简单的缓存更新逻辑:activate
事件处理函数用于在 Service Workers 激活时,清除旧的缓存(不在cacheWhitelist
中的缓存)。fetch
事件处理函数用于拦截网络请求,首先尝试从缓存中获取资源,如果缓存中没有,则从网络中获取。ws
库)建立 WebSockets 服务: