generateSW
在 vite-plugin-pwa 插件上决定使用此策略之前,您必须阅读使用哪种模式
你可以在 workbox 网站上找到这个方法的文档:generateSW
你可以在 workbox 网站上找到插件的使用指南:使用插件
缓存外部资源
如果你使用一些 CDN 来下载一些资源,比如 fonts 和 css ,你必须将它们包含在 service worker 预缓存中,这样你的应用程序在离线时也能正常运行
下面案例将使用来自 https://fonts.googleapis.com 的 css 和 https://fonts.gstatic.com 的 fonts .
在 index.html 文件中,您必须配置 css 和 link ,并且必须为外部资源(参见处理第三方请求)包含 crossorigin="anonymous" 属性:
index.html
html
<head>
<link rel="dns-prefetch" href="https://fonts.googleapis.com" />
<link rel="dns-prefetch" href="https://fonts.gstatic.com" />
<link
rel="preconnect"
crossorigin="anonymous"
href="https://fonts.googleapis.com"
/>
<link
rel="preconnect"
crossorigin="anonymous"
href="https://fonts.gstatic.com"
/>
<link
rel="stylesheet"
crossorigin="anonymous"
href="https://fonts.googleapis.com/css2?family=Fira+Code&display=swap"
/>
</head>然后在您的 vite.config.ts 文件中添加以下代码:
VitePWA 选项
ts
VitePWA({
workbox: {
runtimeCaching: [
{
urlPattern: /^https:\/\/fonts\.googleapis\.com\/.*/i,
handler: 'CacheFirst',
options: {
cacheName: 'google-fonts-cache',
expiration: {
maxEntries: 10,
maxAgeSeconds: 60 * 60 * 24 * 365, // <== 365 days
},
cacheableResponse: {
statuses: [0, 200],
},
},
},
{
urlPattern: /^https:\/\/fonts\.gstatic\.com\/.*/i,
handler: 'CacheFirst',
options: {
cacheName: 'gstatic-fonts-cache',
expiration: {
maxEntries: 10,
maxAgeSeconds: 60 * 60 * 24 * 365, // <== 365 days
},
cacheableResponse: {
statuses: [0, 200],
},
},
},
],
},
});排除路由
为了防止某些路由被 service worker 拦截,您只需将这些路由通过正则匹配添加到 workbox 的 navigateFallbackDenylist 选项列表中即可:
ts
VitePWA({
workbox: {
navigateFallbackDenylist: [/^\/backoffice/],
},
});警告
你必须处理那些被排除路由的离线支持:如果请求 navigateFallbackDenylist 页面上的内容,你将得到 No internet connection
Background Sync
你可以在你的 vite.config.ts 文件中给插件中添加以下代码,以为您的 service worker 添加一个 Background Sync 管理器:
VitePWA 选项
ts
VitePWA({
workbox: {
runtimeCaching: [
{
handler: 'NetworkOnly',
urlPattern: /\/api\/.*\/*.json/,
method: 'POST',
options: {
backgroundSync: {
name: 'myQueueName',
options: {
maxRetentionTime: 24 * 60,
},
},
},
},
],
},
});