3-1.缓存策略
TIP
GenerateSW 模式默认使用的是 workbox.precaching.precacheAndRoute 方法,而该方法默认是 CacheFirst 策略。
1.CacheOnly
CacheOnly 策略从缓存中获取资源,如果缓存中找不到资源,则返回 404。

import { registerRoute } from 'workbox-routing'
import { CacheOnly } from 'workbox-strategies'
registerRoute(({url}) => url.pathname.startsWith('/app/v2/'), new CacheOnly())2.NetworkOnly
NetworkOnly 策略从网络获取资源,如果网络请求失败,则返回 404。

import { registerRoute } from 'workbox-routing'
import { NetworkOnly } from 'workbox-strategies'
registerRoute(({url}) => url.pathname.startsWith('/admin/'), new NetworkOnly())3.CacheFirst
CacheFirst 策略从缓存中获取资源,如果缓存中找不到资源,则从网络获取资源。

import { registerRoute } from 'workbox-routing'
import { CacheFirst } from 'workbox-strategies'
registerRoute(({request}) => request.destination === 'style', new CacheFirst())4.NetworkFirst
NetworkFirst 策略从网络获取资源,如果网络请求失败,则从缓存中获取资源。

import { registerRoute } from 'workbox-routing'
import { NetworkFirst } from 'workbox-strategies'
registerRoute(
({url}) => url.pathname.startsWith('/social-timeline/'),
new NetworkFirst()
)5.StaleWhileRevalidate
StaleWhileRevalidate 策略从缓存中获取资源,如果缓存中找不到资源,则从网络获取资源,如果网络请求失败,则返回缓存中的资源。

import { registerRoute } from 'workbox-routing'
import { StaleWhileRevalidate } from 'workbox-strategies'
registerRoute(
({url}) => url.pathname.startsWith('/images/avatars/'),
new StaleWhileRevalidate()
)3-2.workbox-webpack-plugin
workbox-webpack-plugin 是一个 Webpack 插件,用于生成 Service Worker 文件。
它支持两种模式:
GenerateSW(默认值)InjectManifest
官方介绍如何选择 GenerateSW 或者 InjectManifest 模式。
简单说一下我对这两种模式的理解:
GenerateSW:在该模式下,workbox-webpack-plugin会自动生成precache-manifest.js和Service Worker文件,且该Service Worker文件内置了对于precache-manifest.js文件的处理逻辑。(很方便开发者使用默认逻辑,但缺点是不支持自定义Service Worker逻辑)。InjectManifest:在该模式下,workbox-webpack-plugin只会生成precache-manifest.js,因此开发者需要手动声明swSrc配置以自定义Service Worker文件逻辑。workbox-webpack-plugin会自动利用importScripts方法将precache-manifest.js注入到自定义Service Worker文件中。