介绍

此特性集成了 @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;
        };
    };
}
@type{import('@sveltejs/kit').Config}
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;
        };
    };
}
@type{import('@sveltejs/kit').Config}
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
Expand code