介绍
此特性集成了 @vite-pwa/sveltekit
传递 pwa 选项给默认主题来使用 PWA,该选项与 SvelteKit PWA Plugin Options 完全一致,并新增了 darkManifest,可以用来配置夜间模式下的 manifest 文件
在 svelte.config.js 中使用从 @sveltepress/theme-default 导出的 SERVICE_WORKER_PATH 配置 files.serviceWorker
svelte.config.js
+
+
+
+
import function adapter(options?: AdapterOptions): Adapteradapter from '@sveltejs/adapter-static'
import { function vitePreprocess(opts?: VitePreprocessOptions): PreprocessorGroupvitePreprocess } from '@sveltejs/vite-plugin-svelte'
import { const SERVICE_WORKER_PATH: stringSERVICE_WORKER_PATH } from '@sveltepress/theme-default'
/** @type {import('@sveltejs/kit').Config} */
const
const config: {
extensions: string[];
preprocess: PreprocessorGroup[];
kit: {
adapter: Adapter;
files: {
serviceWorker: string;
};
};
}
config = {
extensions: string[]extensions: ['.svelte', '.md'],
preprocess: PreprocessorGroup[]preprocess: [function vitePreprocess(opts?: VitePreprocessOptions): PreprocessorGroupvitePreprocess()],
kit: {
adapter: Adapter;
files: {
serviceWorker: string;
};
}
kit: {
adapter: Adapteradapter: function adapter(options?: AdapterOptions): Adapteradapter(),
files: {
serviceWorker: string;
}
files: {
serviceWorker: stringserviceWorker: const SERVICE_WORKER_PATH: stringSERVICE_WORKER_PATH,
},
},
}
export default
const config: {
extensions: string[];
preprocess: PreprocessorGroup[];
kit: {
adapter: Adapter;
files: {
serviceWorker: string;
};
};
}
config ts
依赖需要
需要安装 workbox-window 来使得 PWA 功能正确工作
npm install --save workbox-window sh
yarn add workbox-window sh
pnpm install workbox-window sh
bun add workbox-window sh
配置示例
用此站点使用的配置来举例:
export default {
scope: stringscope: '/',
base: stringbase: '/',
strategies: stringstrategies: 'generateSW',
kit: {
trailingSlash: string;
}
kit: {
trailingSlash: stringtrailingSlash: 'always',
},
darkManifest: stringdarkManifest: '/manifest-dark.webmanifest',
manifest: {
start_url: string;
scope: string;
name: string;
short_name: string;
icons: {
src: string;
sizes: string;
type: string;
}[];
theme_color: string;
background_color: string;
display: string;
}
manifest: {
start_url: stringstart_url: '/',
scope: stringscope: '/',
name: stringname: 'Sveltepress',
short_name: stringshort_name: 'Sveltepress',
icons: {
src: string;
sizes: string;
type: string;
}[]
icons: [
{
src: stringsrc: '/android-chrome-192x192.png',
sizes: stringsizes: '192x192',
type: stringtype: 'image/png',
},
{
src: stringsrc: '/android-chrome-512x512.png',
sizes: stringsizes: '512x512',
type: stringtype: 'image/png',
},
],
theme_color: stringtheme_color: '#f2f2f2',
background_color: stringbackground_color: '#f2f2f2',
display: stringdisplay: 'standalone',
},
} as any
ts