workbox
Workbox is a collection of JavaScript libraries for Progressive Web Apps
Workbox is a collection of JavaScript libraries for Progressive Web Apps. (Learn more). This module adds full offline support using workbox.
You can pass options to pwa.workbox
in nuxt.config.js
to override the defaults.
Options
workboxVersion
workboxVersion
(String) Version of workbox. Default value is latest tested version which will be updated by updating this package.
workboxURL
workboxURL
(String) URL for workbox CDN. Default is JSDelivr - See Workbox CDN. You can also use config.modulePathPrefix
if you need to rewrite module paths.
importScripts
importScripts
(Array) Additional scripts to be imported in service worker script. (Relative to /
. Can be placed in assets/
directory)
autoRegister
autoRegister
(Boolean) Automatically register /sw.js
on page load. Enabled by default.
dev
dev
(Boolean) Enable workbox in dev mode of nuxt. (Disabled by default - Not recommended)
IMPORTANT NOTE: Remember to clean application data and unregister service workers in your browser or you will experience infinity loop!
It is recommended to test workbox using nuxt build
/nuxt start
. You can enable debug mode using workbox.config.debug
.
cacheNames
cacheNames
(Object) Configure the workbox cache names. See workbox docs for more information on this.
config
config
(Object) Options to be passed to workbox before using it's modules. By default debug
field will be set to false
for production builds.
clientsClaim
clientsClaim
(Boolean) Start controlling any existing clients as soon as it activates. Enabled by default.
skipWaiting
skipWaiting
(Boolean) Skip over the SW waiting lifecycle stage. Enabled by default.
offlineAnalytics
offlineAnalytics
(Boolean) Enable offline Google Analytics tracking through workbox (Disabled by default)
workboxExtensions
workboxExtensions
(String|String[]) Loads and inserts the contents of the specified file path into the service worker script before any call to precacheAndRoute
. You may add as many extra calls as you want to these files.
preCaching
preCaching
(Array) Cache a set of files when registering service worker. Default is []
Workbox takes a lot of the heavy lifting out of precaching by simplifying the API and ensuring assets are downloaded efficiently.
cacheOptions
cacheOptions
(Object) Default:
cachingExtensions
cachingExtensions
(String|String[]) Loads and inserts the contents of the specified file path into the service worker script, below autogenerated calls to workbox.precaching.*
. You may add as many extra calls as you want to these files.
cleanupOutdatedCaches
cleanupOutdatedCaches
(Boolean) Find and remove any of the older precaches that might have been used by previous versions of Workbox.
offline
offline
(Boolean) Cache all routes. Enabled by default.
offlineStrategy
offlineStrategy
(String) Strategy for caching routes. Default is NetworkFirst
.
offlinePage
offlinePage
(String) Enables routing all offline requests to the specified path. (Example: /offline.html
)
Please note that enabling offlinePage
will disable /.*
caching (offline
option) and will route all offline requests to the specified path.
offlineAssets
offlineAssets
(Array) List of assets to precache, in case you need extra files precached other than on the fly caching (_nuxt/*
etc) or you want to ensure assets used by your offlinePage
. (Example: ['/offline.png']
)
runtimeCaching
runtimeCaching
(Array) Custom routes to cache with specific strategy. Useful for caching requests to other origins.
cacheAssets
cacheAssets
(Boolean) Cache requests to the /_nuxt/*
with cacheFirst strategy on the fly. Enabled by default.
NOTE: This is considered safe because all assets should be correctly hashed there.
NOTE: Nuxt smart links trigger chunk downloads for next pages when user sees a link to a non-cached page.
routingExtensions
routingExtensions
(String|String[]) Loads and inserts the contents of the specified file path into the service worker script, below autogenerated calls to workbox.routing.*
. You may add as many extra calls as you want to these files.
assetsURLPattern
assetsURLPattern
(String/Regex) Pattern to match assets for runtime caching.
Default is auto generated based on publicPath
. Supports CDN too.
Default: /_nuxt/
pagesURLPattern
pagesURLPattern
(String/Regex) Pattern to match pages to be offlined.
Default is auto generated based on router.base
.
Default: /
swTemplate
swTemplate
(String) You can use this to customize generated sw.js
. Not recommended to be directly used.
swURL
swURL
(String) If you need to register another service worker (OneSignal, etc) you can use this option.
swDest
swDest
(String) If you want to change the name of service worker, you must use this option with swURL.
swScope
swScope
(String) Defaults to routerBase
.
routerBase
routerBase
(String) Defaults to router base.
publicPath
publicPath
(String) Defaults to /_nuxt
.
Workbox Window
This module uses workbox-window to register and communicate with workbox service worker. See docs for more information about use cases.
As service worker is registered in background, to access instance you have to await on a promise:
Examples
Adding custom runtimeCaching items (For CDN)
By default resources in dist (/_nuxt/
) will be cached with cacheFirst
and other requests to same domain will be cached with networkFirst
strategy.
If you have a custom CDN and need to cache requests for it, simply use runtimeCaching
:
IMPORTANT: Please note that workbox will not cache opaque responses. So please only use either networkFirst
or staleWhileRevalidate
strategies. Please see Handle Third Party Requests.
Adding custom cache
Adding custom service worker
Create static/custom-sw.js
file:
Add it with importScripts
option in nuxt.config.js
:
Hooking on service worker registration life cycle
Create plugins/sw.js
:
Add it to the plugins
section of nuxt.config.js
:
Basic Auth
As a workaround for making basic auth working as described here you have to enable manifest.crossorigin
in nuxt.config.js
:
Thanks to @henrixapp for the tip.
Enable rangeRequests
Safari requires rangeRequests.
plugins/workbox-range-request.js
:
nuxt.config.js
:
Thanks to @CarterLi for the tip.
Disable Add to Home Screen button (the mini-infobar)
A PWA can be installed by the user if it meets a set of criteria and as installable it can trigger an "Add to Home Screen" button (the mini-infobar) as described here.
One criteria is that display
must be either fullscreen
, standalone
, or minimal-ui
. If you want to prevent the mini-infobar from appearing in your App, you can set the pwa.manifest.display
to browser
in nuxt.config.js
:
Refresh to Update Notification
In layouts/default.vue
(or wherever you want, maybe in a plugin):
Last updated