From 4029e449d84f2390d0df44af3ba9ccb665f7b1ad Mon Sep 17 00:00:00 2001 From: SunWuyuan Date: Wed, 11 Jun 2025 15:55:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dsw=E5=8A=A0=E8=BD=BDbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vite.config.mjs | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/vite.config.mjs b/vite.config.mjs index 1f73778..a5e67ba 100644 --- a/vite.config.mjs +++ b/vite.config.mjs @@ -25,14 +25,45 @@ export default defineConfig({ registerType: 'autoUpdate', devOptions: { navigateFallback: 'index.html', - enabled: false, + enabled: true, suppressWarnings: true, }, lang: 'zh-CN', - injectRegister: 'auto', + injectRegister: 'script', strategies: 'generateSW', + registerSW: async () => { + if (!('serviceWorker' in navigator)) { + console.info('当前环境不支持 ServiceWorker'); + return; + } + if (window.location.protocol === 'file:') { + console.info('在file://协议下ServiceWorker不可用'); + return; + } + + try { + const { registerSW } = await import('virtual:pwa-register'); + const registration = await registerSW({ + immediate: false, + onRegisteredSW() { + console.info('ServiceWorker 注册成功'); + }, + onRegisterError(error) { + console.warn('ServiceWorker 注册失败:', error); + } + }); + + if (registration) { + registration.addEventListener('error', (error) => { + console.warn('ServiceWorker 发生错误:', error); + }); + } + } catch (e) { + console.warn('ServiceWorker 初始化失败:', e); + } + }, workbox: { globPatterns: ['*'], @@ -71,11 +102,9 @@ export default defineConfig({ } }, { - // 匹配当前域名下除了上述规则外的所有请求 urlPattern: ({ url, sameOrigin }) => { if (!sameOrigin) return false; const path = url.pathname; - // 排除已经由其他规则处理的路径 return !(path.includes('/assets/') || path.includes('/pwa/')); }, handler: 'NetworkFirst', @@ -95,7 +124,9 @@ export default defineConfig({ additionalManifestEntries: [], clientsClaim: true, skipWaiting: true, - importScripts: ['/sw-cache-manager.js'] + cleanupOutdatedCaches: true, + navigationPreload: true, + importScripts: ['./sw-cache-manager.js'], }, manifest: { name: 'Classworks作业板',