1
- import { createHandlerBoundToURL , precacheAndRoute } from 'workbox-precaching'
2
- import { NavigationRoute , registerRoute } from 'workbox-routing'
1
+ import { precacheAndRoute } from 'workbox-precaching'
2
+ import { NavigationRoute , registerRoute , Route } from 'workbox-routing'
3
+ import * as navigationPreload from 'workbox-navigation-preload'
4
+ import { NetworkFirst , StaleWhileRevalidate } from 'workbox-strategies'
3
5
import { clientsClaim } from 'workbox-core'
4
6
5
7
declare let self : ServiceWorkerGlobalScope
@@ -13,11 +15,35 @@ self.addEventListener('message', (event) => {
13
15
14
16
clientsClaim ( )
15
17
16
- // self.__WB_MANIFEST is default injection point
18
+ // Precache the manifest
17
19
precacheAndRoute ( self . __WB_MANIFEST )
18
20
19
- // clean old assets
20
- // cleanupOutdatedCaches ()
21
+ // Enable navigation preload
22
+ navigationPreload . enable ( )
21
23
22
- // to allow work offline
23
- registerRoute ( new NavigationRoute ( createHandlerBoundToURL ( 'index.html' ) ) )
24
+ // Create a new navigation route that uses the Network-first, falling back to
25
+ // cache strategy for navigation requests with its own cache. This route will be
26
+ // handled by navigation preload. The NetworkOnly strategy will work as well.
27
+ const navigationRoute = new NavigationRoute (
28
+ new NetworkFirst ( {
29
+ cacheName : 'navigations' ,
30
+ } ) ,
31
+ )
32
+
33
+ // Register the navigation route
34
+ registerRoute ( navigationRoute )
35
+
36
+ // Create a route for image, script, or style requests that use a
37
+ // stale-while-revalidate strategy. This route will be unaffected
38
+ // by navigation preload.
39
+ const staticAssetsRoute = new Route (
40
+ ( { request } ) => {
41
+ return [ 'image' , 'script' , 'style' ] . includes ( request . destination )
42
+ } ,
43
+ new StaleWhileRevalidate ( {
44
+ cacheName : 'static-assets' ,
45
+ } ) ,
46
+ )
47
+
48
+ // Register the route handling static assets
49
+ registerRoute ( staticAssetsRoute )
0 commit comments