From 4e638a6714fa16b26d25e32928f7e75432cd88cc Mon Sep 17 00:00:00 2001 From: 9cats <123337671@qq.com> Date: Thu, 18 May 2023 17:00:15 +0800 Subject: [PATCH] feat(client): support PWA --- packages/client/app/assets/koishi-192x192.png | Bin 0 -> 9135 bytes packages/client/app/assets/koishi-512x512.png | Bin 0 -> 44627 bytes packages/client/app/sw.ts | 29 ++++++++++++++++ packages/client/app/tsconfig.json | 1 + packages/client/build/client.ts | 32 +++++++++++++++++- packages/client/package.json | 1 + 6 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 packages/client/app/assets/koishi-192x192.png create mode 100644 packages/client/app/assets/koishi-512x512.png create mode 100644 packages/client/app/sw.ts diff --git a/packages/client/app/assets/koishi-192x192.png b/packages/client/app/assets/koishi-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..af26ea0b1d93a70b7e2cbc8deffca3cc344701e6 GIT binary patch literal 9135 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 literal 0 HcmV?d00001 diff --git a/packages/client/app/assets/koishi-512x512.png b/packages/client/app/assets/koishi-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..557e92050f70931d379b76b9b38084bb0c103ad4 GIT binary patch literal 44627 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%0A6*QW7>nfUb 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

Opnmy z5Y=&gmz08i8Zo|AA+cW|6@N|>rTHc^`*la=U~GW`4YC>D8`(~C@>p`h>7|8+RUw9} zkuH>cnz;O7@OK2Um|3;4##j;K*GbR*!tF_L&MS&8(a7G>Dpi@CFb?5zccs=yG~x3( zDLeX88L9`cVX9$>uA>p(y?3F8LLsl6@>s&aDT#FL`g@>n;R@$pOtoCv2mdHFWxini z{@tmroxC!^n*FxpgD0nCi2>UN#Wq^9Pfklko*XTOn5*@S&_}-1b{J58zh(~iETrjN z^{#%_>&#Y?tkDT$N=e;v3PElY*KYp@%oGd+D!Dc!*9u&2FGf9;Khy6=E!1({6pQH3Tog{j^IgOwW4T idCua { + self.skipWaiting() +}) + +self.addEventListener('activate', () => { + self.clients.claim() +}) + +self.addEventListener('fetch', (event) => { + if (/(.js|.mjs|.css)$/.test(event.request.url)) { + event.respondWith(fetch(event.request)) + } else { + event.respondWith(fetch(event.request, { cache: 'no-store' })) + } +}) + +// Cleanup Outdated Caches +cleanupOutdatedCaches() +precacheAndRoute(self.__WB_MANIFEST) + +// Prompt For Update Behavior +self.addEventListener('message', (event) => { + if (event.data && event.data.type === 'SKIP_WAITING') self.skipWaiting() +}) diff --git a/packages/client/app/tsconfig.json b/packages/client/app/tsconfig.json index 44f19c0b..629d7f6d 100644 --- a/packages/client/app/tsconfig.json +++ b/packages/client/app/tsconfig.json @@ -2,6 +2,7 @@ "extends": "../tsconfig.client", "compilerOptions": { "rootDir": ".", + "lib": ["ESNext", "DOM", "WebWorker"] }, "include": [ ".", diff --git a/packages/client/build/client.ts b/packages/client/build/client.ts index e1d5e874..66313f21 100644 --- a/packages/client/build/client.ts +++ b/packages/client/build/client.ts @@ -4,6 +4,7 @@ import { resolve } from 'path' import * as vite from 'vite' import vue from '@vitejs/plugin-vue' import yaml from '@maikolib/vite-plugin-yaml' +import { VitePWA as pwa } from 'vite-plugin-pwa' function findModulePath(id: string) { const path = require.resolve(id).replace(/\\/g, '/') @@ -18,6 +19,7 @@ export async function build(root: string, config: vite.UserConfig = {}, isClient const { rollupOptions = {} } = config.build || {} return await vite.build({ root, + publicDir: 'assets', build: { outDir: cwd + '/plugins/console/dist', emptyOutDir: true, @@ -46,6 +48,7 @@ export async function build(root: string, config: vite.UserConfig = {}, isClient plugins: [ vue(), yaml(), + config.plugins, ], resolve: { alias: { @@ -62,7 +65,34 @@ export async function build(root: string, config: vite.UserConfig = {}, isClient export default async function () { // build for console main - const { output } = await build(cwd + '/packages/client/app') + const { output } = await build(cwd + '/packages/client/app', { + plugins: [ + pwa({ + strategies: 'injectManifest', + srcDir: '.', + filename: 'sw.ts', + injectRegister: 'inline', + manifest: { + name: 'Koishi', + short_name: 'Koishi', + description: 'Koishi 控制台', + theme_color: '#ffffff', + icons: [ + { + src: 'koishi-192x192.png', + sizes: '192x192', + type: 'image/png', + }, + { + src: 'koishi-512x512.png', + sizes: '512x512', + type: 'image/png', + }, + ], + }, + }), + ], + }) await Promise.all([ copyFile(findModulePath('vue') + '/dist/vue.runtime.esm-browser.prod.js', dist + '/vue.js'), diff --git a/packages/client/package.json b/packages/client/package.json index 6957f44d..fa41a541 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -47,6 +47,7 @@ "ns-require": "^1.1.4", "sass": "^1.62.1", "vite": "^4.3.5", + "vite-plugin-pwa": "^0.14.7", "vue": "^3.3.2", "vue-i18n": "^9.2.2", "vue-router": "^4.2.0"