Skip to content

Commit 6fc3ed5

Browse files
committed
! pwa
1 parent a206e0e commit 6fc3ed5

2 files changed

Lines changed: 23 additions & 48 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676
"vconsole": "^3.15.1",
7777
"vite": "^3.2.11",
7878
"vite-plugin-monaco-editor": "^1.1.0",
79-
"vite-plugin-pwa": "^0.16.7",
79+
"vite-plugin-pwa": "^1.3.0",
8080
"vite-plugin-style-import": "^2.0.0",
8181
"vite-plugin-svg-icons": "^2.0.1",
8282
"vue-tsc": "^0.35.2",

vite.config.ts

Lines changed: 22 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ import { createSvgIconsPlugin } from "vite-plugin-svg-icons";
77
import viteCompression from "vite-plugin-compression";
88
import { VitePWA } from "vite-plugin-pwa";
99

10-
const version = JSON.parse(
11-
fs.readFileSync(path.join(__dirname, "package.json"), "utf-8")
12-
).version.trim();
10+
const version = JSON.parse(fs.readFileSync(path.join(__dirname, "package.json"), "utf-8")).version.trim();
1311

1412
const alias: Record<string, string> = {
1513
"@": path.resolve(__dirname, "src"),
@@ -106,43 +104,26 @@ const viteConfig = defineConfig((mode: ConfigEnv) => {
106104
],
107105
},
108106
workbox: {
109-
maximumFileSizeToCacheInBytes: 3 * 1024 * 1024,
110-
navigateFallbackDenylist: [/(^|\/.+)\/(api|download|share)\/.+/],
111-
// globPatterns: ['**/*.{css,js,gz,eot,html,svg,png,ico,ttf,woff2}'],
107+
globPatterns: ["**/*.{js,css,html,ico,png,svg,webmanifest,json}"],
108+
navigateFallback: "/index.html",
112109
runtimeCaching: [
113110
{
114-
urlPattern: /(^|\/.+)\/(api|download|share)\/.+/,
115-
handler: "NetworkOnly",
116-
},
117-
{
118-
urlPattern: /.*\.(?:js|css|gz|html|json)/i, // json
119-
handler: "CacheFirst",
111+
urlPattern: ({ url, request }) => request.destination === "script" && url.origin === self.location.origin,
112+
handler: "StaleWhileRevalidate",
120113
options: {
121-
cacheName: "sub-store-js-cache",
122-
expiration: {
123-
maxEntries: 30,
124-
maxAgeSeconds: 60 * 60 * 24 * 30,
125-
},
126-
cacheableResponse: {
127-
statuses: [200],
128-
},
114+
cacheName: "js-cache",
129115
},
130116
},
131117
{
132-
urlPattern: /https:\/\/avatars\.githubusercontent\.com\/u\/\d+(?:\?.*)?$|.*\.(?:png|svg|ico|jpe?g|webp|avif|gif|woff2?|ttf|eot|otf)(?:\?.*)?$/i,
118+
urlPattern: ({ request }) => request.destination === "style" || request.destination === "image" || request.destination === "font",
133119
handler: "CacheFirst",
134120
options: {
135-
cacheName: "sub-store-res-cache",
136-
expiration: {
137-
maxEntries: 300,
138-
maxAgeSeconds: 60 * 60 * 24 * 365,
139-
},
140-
cacheableResponse: {
141-
statuses: [0, 200],
142-
},
121+
cacheName: "asset-cache",
143122
},
144123
},
145124
],
125+
skipWaiting: true,
126+
clientsClaim: true,
146127
},
147128
selfDestroying: false,
148129
}),
@@ -174,26 +155,20 @@ const viteConfig = defineConfig((mode: ConfigEnv) => {
174155
entryFileNames: "[name].js",
175156
chunkFileNames: "chunks/[name]-[hash].js",
176157
assetFileNames: (assetInfo) => {
177-
const ext = assetInfo.name?.split('.').pop()?.toLowerCase() ?? '';
178-
if (/^(png|jpe?g|svg|webp|avif|gif|ico)$/.test(ext)) return 'images/[name].[ext]';
179-
if (/^(woff2?|ttf|eot|otf)$/.test(ext)) return 'fonts/[name].[ext]';
180-
if (ext === 'css') return 'css/[name].[ext]';
181-
return '[name].[ext]';
158+
const ext = assetInfo.name?.split(".").pop()?.toLowerCase() ?? "";
159+
if (/^(png|jpe?g|svg|webp|avif|gif|ico)$/.test(ext)) return "images/[name].[ext]";
160+
if (/^(woff2?|ttf|eot|otf)$/.test(ext)) return "fonts/[name].[ext]";
161+
if (ext === "css") return "css/[name].[ext]";
162+
return "[name].[ext]";
182163
},
183164
manualChunks(id) {
184-
if (id.includes('node_modules')) {
185-
if (id.includes('@nutui/nutui') || (id.includes('@nutui') && !id.includes('@nutui/icons'))) return 'nutui';
186-
if (
187-
id.includes('/codemirror/') ||
188-
id.includes('@codemirror/') ||
189-
id.includes('@lezer/') ||
190-
id.includes('@replit/codemirror') ||
191-
id.includes('js-beautify')
192-
) return 'editor';
193-
if (id.includes('vue-i18n') || id.includes('@intlify/')) return 'i18n';
194-
if (id.includes('@fortawesome/')) return 'icons';
195-
if (id.includes('@vuepic/vue-datepicker')) return 'datepicker';
196-
if (id.includes('/vue/') || id.includes('/vue-router/') || id.includes('/pinia/') || id.includes('@vue/') || id.includes('@vueuse/')) return 'vue-vendor';
165+
if (id.includes("node_modules")) {
166+
if (id.includes("@nutui/nutui") || (id.includes("@nutui") && !id.includes("@nutui/icons"))) return "nutui";
167+
if (id.includes("/codemirror/") || id.includes("@codemirror/") || id.includes("@lezer/") || id.includes("@replit/codemirror") || id.includes("js-beautify")) return "editor";
168+
if (id.includes("vue-i18n") || id.includes("@intlify/")) return "i18n";
169+
if (id.includes("@fortawesome/")) return "icons";
170+
if (id.includes("@vuepic/vue-datepicker")) return "datepicker";
171+
if (id.includes("/vue/") || id.includes("/vue-router/") || id.includes("/pinia/") || id.includes("@vue/") || id.includes("@vueuse/")) return "vue-vendor";
197172
}
198173
},
199174
},

0 commit comments

Comments
 (0)