Effectuer une migration depuis sw-precache ou sw-Toolbox

Les développeurs qui ont déjà utilisé sw-precache et/ou sw-toolbox peuvent passer facilement à la famille de bibliothèques Workbox. La mise à niveau vers Workbox offrira une expérience de service worker moderne et extensible, avec un débogage amélioré et une ergonomie développeur.

Modifications de la configuration existante

Si vous utilisez sw-precache configuré avec l'une des options suivantes, vous devez prendre en compte les modifications suivantes lors de la migration vers Workbox.

Options renommées

Le paramètre de configuration dynamicUrlToDependencies a été renommé templatedURLs.

Le paramètre de configuration staticFileGlobs a été renommé globPatterns.

Le paramètre de configuration runtimeCaching utilise un ensemble d'options mis à jour, correspondant aux noms utilisés dans les modules Workbox sous-jacents. Pour illustrer le changement de nom, cette configuration sw-precache:

runtimeCaching: [{
  urlPattern: /api/,
  handler: 'fastest',
  options: {
    cache: {
      name: 'my-api-cache',
      maxEntries: 5,
      maxAgeSeconds: 60,
    },
  },
}],

équivaut à la configuration de la boîte de travail suivante:

runtimeCaching: [{
  urlPattern: /api/,
  // 'fastest' is now 'StaleWhileRevalidate'
  handler: 'StaleWhileRevalidate',
  options: {
    // options.cache.name is now options.cacheName
    cacheName: 'my-api-cache',
    // options.cache is now options.expiration
    expiration: {
      maxEntries: 5,
      maxAgeSeconds: 60,
    },
  },
}],

Options obsolètes

Les itinéraires comportant des caractères génériques de style Express ne sont plus acceptés. Si vous utilisiez des routes génériques de type Express dans la configuration runtimeCaching ou directement dans sw-toolbox, migrez vers une route d'expression régulière équivalente lorsque vous utilisez Workbox.

Migrations sw-precache

De la CLI sw-precache à workbox-cli

Pour les développeurs qui utilisent l'interface de ligne de commande sw-precache, en exécutant la commande manuellement ou dans le cadre d'un processus de compilation basé sur npm scripts, le module workbox-cli est le moyen le plus simple d'effectuer la migration. L'installation de workbox-cli vous permettra d'accéder à un binaire appelé workbox.

Bien que la CLI sw-precache prend en charge la configuration via des indicateurs de ligne de commande ou un fichier de configuration, la CLI workbox exige que toutes les options de configuration soient fournies dans un fichier de configuration, à l'aide de CommonJS module.exports.

La CLI workbox accepte un certain nombre de modes différents. (Utilisez workbox --help pour les afficher toutes.) Toutefois, le mode qui correspond le mieux à la fonctionnalité de sw-precache est generateSW. Donc, un appel à

$ sw-precache --config='sw-precache-config.js'

peut être exprimée sous la forme

$ workbox generateSW workbox-config.js

Du module de nœud sw-precache au module de nœud workbox-build

Les développeurs qui utilisent l'API node pour sw-precache, soit dans le cadre d'un workflow gulp/Grunt, soit simplement dans un script de compilation node personnalisé, peuvent migrer en basculant vers le module workbox-build node.

La fonction generateSW() du module workbox-build correspond le mieux à la fonction write() du module sw-precache. L'une des principales différences est que generateSW() renvoie toujours une promesse, tandis que l'ancienne fonction write() prenait en charge à la fois une interface basée sur une promesse et une interface de rappel.

Utilisation de gulp, le cas échéant

const swPrecache = require('sw-precache');
gulp.task('generate-service-worker', function () {
  return swPrecache.write('service-worker.js', {
    // Config options.
  });
});

peut être remplacé par

const workboxBuild = require('workbox-build');
gulp.task('generate-service-worker', function () {
  return workboxBuild.generateSW({
    // Config options.
  });
});

Du plug-in sw-precache-webpack-plugin vers le plug-in Workbox webpack

Les développeurs qui utilisent sw-precache-webpack-plugin dans le cadre de leur processus de compilation webpack peuvent migrer vers la classe GenerateSW dans le module workbox-webpack-plugin.

workbox-webpack-plugin s'intègre directement au processus de création de Webpack et "connaît" tous les éléments générés par une compilation donnée. Cela signifie que, dans de nombreux cas d'utilisation, vous pouvez compter sur le comportement par défaut de workbox-webpack-plugin sans configuration supplémentaire et obtenir un service worker équivalent à celui fourni par sw-precache-webpack-plugin.

const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin');
const webpackConfig = {
  // ...
  plugins: [
    new SWPrecacheWebpackPlugin({
      dontCacheBustUrlsMatching: /\.\w{8}\./,
      filename: 'service-worker.js',
    }),
  ],
};

peut être remplacé par

const {GenerateSW} = require('workbox-webpack-plugin');
const webpackConfig = {
  // ...
  plugins: [
    new GenerateSW({
      // Config options, if needed.
    }),
  ],
};

Migrations de sw- Toolkit

Passez du kit SWW fabriqué à la main à workbox-sw

Si vous utilisiez sw-toolbox directement (plutôt que implicitement via l'option runtimeCaching de sw-precache), la migration vers Workbox nécessite des ajustements manuels pour obtenir le comportement équivalent. Pour en savoir plus, consultez la documentation sur les modules workbox-routing et workbox-strategies.

Voici quelques extraits de code qui vous aideront à effectuer la migration. Ce code sw-toolbox:

importScripts('path/to/sw-toolbox.js');

// Set up a route that matches HTTP 'GET' requests.
toolbox.router.get(
  // Match any URL that contains 'ytimg.com', regardless of
  // where in the URL that match occurs.
  /\.ytimg\.com\//,

  // Apply a cache-first strategy to anything that matches.
  toolbox.cacheFirst,

  {
    // Configure a custom cache name and expiration policy.
    cache: {
      name: 'youtube-thumbnails',
      maxEntries: 10,
      maxAgeSeconds: 30,
    },
  }
);

// Set a default network-first strategy to use when
// there is no explicit matching route:
toolbox.router.default = toolbox.networkFirst;

équivaut au code de la boîte de travail:

importScripts('path/to/workbox-sw.js');

workbox.routing.registerRoute(
  // Match any URL that contains 'ytimg.com'.
  // Unlike in sw-toolbox, in Workbox, a RegExp that matches
  // a cross-origin URL needs to include the initial 'https://'
  // as part of the match.
  new RegExp('^https://.*.ytimg.com'),

  // Apply a cache-first strategy to anything that matches.
  new workbox.strategies.CacheFirst({
    // Configuration options are passed in to the strategy.
    cacheName: 'youtube-thumbnails',
    plugins: [
      new workbox.expiration.ExpirationPlugin({
        maxEntries: 10,
        maxAgeSeconds: 30,
      }),
      // In Workbox, you must explicitly opt-in to caching
      // responses with a status of 0 when using the
      // cache-first strategy.
      new workbox.cacheableResponse.CacheableResponsePlugin({
        statuses: [0, 200],
      }),
    ],
  })
);

// Set a default network-first strategy to use when
// there is no explicit matching route:
workbox.routing.setDefaultHandler(new workbox.strategies.NetworkFirst());

Obtenir de l'aide

Nous estimons que la plupart des migrations vers Workbox devraient être simples. Si vous rencontrez des problèmes qui ne sont pas abordés dans ce guide, veuillez nous signaler un problème sur GitHub.