mirror of
https://github.com/wu736139669/hapi.git
synced 2026-08-05 06:24:37 +00:00
Improve service worker update handling to fix caching issues during development: - Add skipWaiting and clientsClaim in Workbox config for immediate SW activation - Remove user confirmation prompt and switch to silent automatic updates - Replace hourly polling with visibility-based update checks via visibilitychange event This resolves the issue where web updates would not take effect without manual cache clearing.
128 lines
4.4 KiB
TypeScript
128 lines
4.4 KiB
TypeScript
import { defineConfig } from 'vite'
|
|
import react from '@vitejs/plugin-react'
|
|
import { VitePWA } from 'vite-plugin-pwa'
|
|
import { resolve } from 'node:path'
|
|
|
|
export default defineConfig({
|
|
plugins: [
|
|
react(),
|
|
VitePWA({
|
|
registerType: 'autoUpdate',
|
|
includeAssets: ['favicon.ico', 'apple-touch-icon-180x180.png', 'mask-icon.svg'],
|
|
manifest: {
|
|
name: 'Hapi',
|
|
short_name: 'Hapi',
|
|
description: 'AI-powered development assistant',
|
|
theme_color: '#ffffff',
|
|
background_color: '#ffffff',
|
|
display: 'standalone',
|
|
orientation: 'portrait',
|
|
scope: '/',
|
|
start_url: '/',
|
|
icons: [
|
|
{
|
|
src: 'pwa-64x64.png',
|
|
sizes: '64x64',
|
|
type: 'image/png'
|
|
},
|
|
{
|
|
src: 'pwa-192x192.png',
|
|
sizes: '192x192',
|
|
type: 'image/png'
|
|
},
|
|
{
|
|
src: 'pwa-512x512.png',
|
|
sizes: '512x512',
|
|
type: 'image/png'
|
|
},
|
|
{
|
|
src: 'maskable-icon-512x512.png',
|
|
sizes: '512x512',
|
|
type: 'image/png',
|
|
purpose: 'maskable'
|
|
}
|
|
]
|
|
},
|
|
workbox: {
|
|
skipWaiting: true,
|
|
clientsClaim: true,
|
|
globPatterns: ['**/*.{js,css,html,ico,png,svg,woff,woff2}'],
|
|
runtimeCaching: [
|
|
{
|
|
urlPattern: /^\/api\/sessions$/,
|
|
handler: 'NetworkFirst',
|
|
options: {
|
|
cacheName: 'api-sessions',
|
|
expiration: {
|
|
maxEntries: 10,
|
|
maxAgeSeconds: 60 * 5
|
|
},
|
|
networkTimeoutSeconds: 10
|
|
}
|
|
},
|
|
{
|
|
urlPattern: /^\/api\/sessions\/[^/]+$/,
|
|
handler: 'NetworkFirst',
|
|
options: {
|
|
cacheName: 'api-session-detail',
|
|
expiration: {
|
|
maxEntries: 20,
|
|
maxAgeSeconds: 60 * 5
|
|
},
|
|
networkTimeoutSeconds: 10
|
|
}
|
|
},
|
|
{
|
|
urlPattern: /^\/api\/machines$/,
|
|
handler: 'NetworkFirst',
|
|
options: {
|
|
cacheName: 'api-machines',
|
|
expiration: {
|
|
maxEntries: 5,
|
|
maxAgeSeconds: 60 * 10
|
|
},
|
|
networkTimeoutSeconds: 10
|
|
}
|
|
},
|
|
{
|
|
urlPattern: /^https:\/\/cdn\.socket\.io\/.*/,
|
|
handler: 'CacheFirst',
|
|
options: {
|
|
cacheName: 'cdn-socketio',
|
|
expiration: {
|
|
maxEntries: 5,
|
|
maxAgeSeconds: 60 * 60 * 24 * 30
|
|
}
|
|
}
|
|
},
|
|
{
|
|
urlPattern: /^https:\/\/telegram\.org\/.*/,
|
|
handler: 'CacheFirst',
|
|
options: {
|
|
cacheName: 'cdn-telegram',
|
|
expiration: {
|
|
maxEntries: 5,
|
|
maxAgeSeconds: 60 * 60 * 24 * 7
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
devOptions: {
|
|
enabled: true,
|
|
type: 'module'
|
|
}
|
|
})
|
|
],
|
|
base: '/',
|
|
resolve: {
|
|
alias: {
|
|
'@': resolve(__dirname, 'src')
|
|
}
|
|
},
|
|
build: {
|
|
outDir: 'dist',
|
|
emptyOutDir: true
|
|
}
|
|
})
|