This is the pre-release documentation site for the Magento PWA project. To provide feedback or contribute content, check out the pwa-devdocs repository.

ServiceWorkerPlugin

A webpack plugin for configuring a ServiceWorker for different PWA development scenarios.

This plugin is a wrapper around the Google Workbox Webpack Plugin. It generates a caching ServiceWorker based on assets emitted by webpack.

The following configurations are available for this plugin:

  • normal development - the ServiceWorker is disabled
  • service worker debugging - the ServiceWorker and hot-reloading are enabled.

API

ServiceWorker(options)

Plugin constructor for the ServiceWorkerPlugin class.

Parameters

  • options: PluginOptions - Configuration object for the ServiceWorkerPlugin

The PluginOptions object contains the following properties:

Property: Type Description
env:EnvironmentObject Required. An object that represents the current environment.
paths:LocalProjectLocation Required. Configuration object that describes where public assets are located.
enableServiceWorkerDebugging: boolean Toggles service worker debugging.
serviceWorkerFilename: string Required. The name of the ServiceWorker file this theme creates.
runtimeCacheAssetPath: string A remote URL or root path to assets the ServiceWorker should cache during runtime.

The EnvironmentObject contains the following properties:

Property: Type Description
phase: string Must be development or production.

Example

In webpack.config.js:

const path = require('path');
const buildpack = require('@magento/pwa-buildpack');
const ServiceWorkerPlugin = buildpack.Webpack.ServiceWorkerPlugin;

module.exports = async env => {
    const config = {
        /* webpack config, i.e. entry, output, etc. */
        plugins: [
            /* other plugins */
            new ServiceWorkerPlugin({
                env: {
                    mode: 'development'
                },

                paths: {
                    output: path.resolve(__dirname, 'web/js'),
                    assets: path.resolve(__dirname, 'web')
                },
                enableServiceWorkerDebugging: true,
                serviceWorkerFileName: 'sw.js',
                runtimeCacheAssetPath: 'https://cdn.url'
            })
        ]
    };

    return config;

};

Service worker debugging

When PluginOptions.enableServiceWorkerDebugging is set to true, hot reloading is enabled and the ServiceWorker is active in the document root.

When this value is set to false, the ServiceWorker is disabled to prevent cache interruptions when hot reloading assets.