Migrate pwa to Serwist
@ -1,9 +1,23 @@
|
|||||||
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
const {
|
||||||
const withPWA = require("@ducanh2912/next-pwa").default({
|
PHASE_DEVELOPMENT_SERVER,
|
||||||
dest: "public",
|
PHASE_PRODUCTION_BUILD,
|
||||||
});
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
||||||
|
} = require("next/constants");
|
||||||
|
|
||||||
/** @type {import('next').NextConfig} */
|
/** @type {(phase: string, defaultConfig: import("next").NextConfig) => Promise<import("next").NextConfig>} */
|
||||||
const nextConfig = {}
|
module.exports = async (phase) => {
|
||||||
|
/** @type {import("next").NextConfig} */
|
||||||
|
const nextConfig = {};
|
||||||
|
|
||||||
module.exports = withPWA(nextConfig);
|
if (phase === PHASE_DEVELOPMENT_SERVER || phase === PHASE_PRODUCTION_BUILD) {
|
||||||
|
const withSerwist = (await import("@serwist/next")).default({
|
||||||
|
// Note: This is only an example. If you use Pages Router,
|
||||||
|
// use something else that works, such as "service-worker/index.ts".
|
||||||
|
swSrc: "src/app/sw.ts",
|
||||||
|
swDest: "public/sw.js",
|
||||||
|
});
|
||||||
|
return withSerwist(nextConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
return nextConfig;
|
||||||
|
};
|
@ -10,11 +10,11 @@
|
|||||||
"format": "prettier --write ./src"
|
"format": "prettier --write ./src"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ducanh2912/next-pwa": "^10.2.5",
|
|
||||||
"@fortawesome/fontawesome-svg-core": "^6.4.0",
|
"@fortawesome/fontawesome-svg-core": "^6.4.0",
|
||||||
"@fortawesome/free-regular-svg-icons": "^6.4.0",
|
"@fortawesome/free-regular-svg-icons": "^6.4.0",
|
||||||
"@fortawesome/free-solid-svg-icons": "^6.4.0",
|
"@fortawesome/free-solid-svg-icons": "^6.4.0",
|
||||||
"@fortawesome/react-fontawesome": "^0.2.0",
|
"@fortawesome/react-fontawesome": "^0.2.0",
|
||||||
|
"@serwist/next": "^9.0.3",
|
||||||
"@vercel/analytics": "^1.0.2",
|
"@vercel/analytics": "^1.0.2",
|
||||||
"next": "^14.1.4",
|
"next": "^14.1.4",
|
||||||
"postcss": "^8.4.30",
|
"postcss": "^8.4.30",
|
||||||
@ -40,6 +40,7 @@
|
|||||||
"prettier": "^3.0.3",
|
"prettier": "^3.0.3",
|
||||||
"prettier-plugin-tailwindcss": "^0.6.4",
|
"prettier-plugin-tailwindcss": "^0.6.4",
|
||||||
"sass": "^1.67.0",
|
"sass": "^1.67.0",
|
||||||
|
"serwist": "^9.0.3",
|
||||||
"tailwindcss": "^3.3.3",
|
"tailwindcss": "^3.3.3",
|
||||||
"typescript": "^5.2.2",
|
"typescript": "^5.2.2",
|
||||||
"webpack": "^5.88.2"
|
"webpack": "^5.88.2"
|
||||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
BIN
public/logo/icon.png
Normal file
After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 22 KiB |
BIN
public/logo/icon_m.png
Normal file
After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 14 KiB |
25
src/app/sw.ts
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import { defaultCache } from '@serwist/next/worker';
|
||||||
|
import type { PrecacheEntry, SerwistGlobalConfig } from 'serwist';
|
||||||
|
import { Serwist } from 'serwist';
|
||||||
|
|
||||||
|
// This declares the value of `injectionPoint` to TypeScript.
|
||||||
|
// `injectionPoint` is the string that will be replaced by the
|
||||||
|
// actual precache manifest. By default, this string is set to
|
||||||
|
// `"self.__SW_MANIFEST"`.
|
||||||
|
declare global {
|
||||||
|
interface WorkerGlobalScope extends SerwistGlobalConfig {
|
||||||
|
__SW_MANIFEST: (PrecacheEntry | string)[] | undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
declare const self: ServiceWorkerGlobalScope;
|
||||||
|
|
||||||
|
const serwist = new Serwist({
|
||||||
|
precacheEntries: self.__SW_MANIFEST,
|
||||||
|
skipWaiting: true,
|
||||||
|
clientsClaim: true,
|
||||||
|
navigationPreload: true,
|
||||||
|
runtimeCaching: defaultCache,
|
||||||
|
});
|
||||||
|
|
||||||
|
serwist.addEventListeners();
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "es5",
|
"target": "es5",
|
||||||
"lib": ["dom", "dom.iterable", "esnext"],
|
"lib": ["dom", "dom.iterable", "esnext", "webworker"],
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"strict": true,
|
"strict": true,
|
||||||
@ -22,8 +22,9 @@
|
|||||||
"baseUrl": ".",
|
"baseUrl": ".",
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["./src/*"]
|
"@/*": ["./src/*"]
|
||||||
}
|
},
|
||||||
|
"types": ["@serwist/next/typings"]
|
||||||
},
|
},
|
||||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
||||||
"exclude": ["node_modules"]
|
"exclude": ["node_modules", "public/sw.js"]
|
||||||
}
|
}
|
||||||
|