Migra desde sw-precache o sw-toolbox

Los desarrolladores que anteriormente usaron sw-precache o sw-toolbox tienen una ruta de actualización directa a la familia de bibliotecas de Workbox. La actualización a Workbox proporcionará una experiencia de servicio trabajador moderna y extensible con una mejor depuración y ergonomía para desarrolladores.

Modificaciones en tu configuración existente

Si usas sw-precache configurado con alguna de las siguientes opciones, deberás tener en cuenta los siguientes cambios cuando migres a Workbox.

Opciones que cambiaron de nombre

Se cambió el nombre del parámetro de configuración dynamicUrlToDependencies a templatedURLs.

Se cambió el nombre del parámetro de configuración staticFileGlobs a globPatterns.

El parámetro de configuración runtimeCaching toma un conjunto actualizado de opciones, que corresponden a los nombres que se usan en los módulos subyacentes de Workbox. Para ilustrar lo que se cambió de nombre, esta configuración de sw-precache:

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

es equivalente a esta configuración de Workbox:

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,
    },
  },
}],

Opciones obsoletas

Ya no se admiten las rutas de comodines de estilo exprés. Si usabas rutas de comodín de estilo Express en la configuración de runtimeCaching o directamente en sw-toolbox, migra a una ruta de expresión regular equivalente cuando uses Workbox.

Migraciones de sw-precache

Desde la CLI de sw-precache a workbox-cli

Los desarrolladores que usan la interfaz de línea de comandos de sw-precache, ya sea que ejecuten el comando de forma manual o como parte de un proceso de compilación basado en npm scripts, descubrirán que usar el módulo workbox-cli es la forma más fácil de migrar. Si instalas workbox-cli, obtendrás acceso a un objeto binario llamado workbox.

Si bien la CLI de sw-precache admite la configuración a través de marcas de línea de comandos o un archivo de configuración, la CLI de workbox requiere que todas las opciones de configuración se proporcionen en un archivo de configuración con CommonJS module.exports.

La CLI de workbox admite varios modos diferentes. (usa workbox --help para verlas todas). Sin embargo, el modo que más coincide con la funcionalidad de sw-precache es generateSW. Por lo tanto, una llamada a

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

puede expresarse como

$ workbox generateSW workbox-config.js

Del módulo de nodo sw-precache al módulo de nodo de compilación de la caja de trabajo

Los desarrolladores que usan la API de node para sw-precache, ya sea como parte de un flujo de trabajo gulp/Grunt o solo dentro de una secuencia de comandos de compilación de node personalizada, pueden migrar al módulo node de workbox-build.

La función generateSW() del módulo workbox-build coincide más con la función write() del módulo sw-precache. Una diferencia clave es que generateSW() siempre muestra una promesa, mientras que la función write() anterior admitía una devolución de llamada y una interfaz basada en promesas.

Uso de gulp similar a

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

se puede cambiar a

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

Del complemento sw-precache-webpack-plugin al complemento Workbox webpack

Los desarrolladores que usan sw-precache-webpack-plugin como parte de su proceso de compilación de webpack pueden migrar cambiando a la clase GenerateSW dentro del módulo workbox-webpack-plugin.

workbox-webpack-plugin se integra directamente con el proceso de compilación de webpack y “conoce” todos los recursos generados por una compilación determinada. Esto significa que, para muchos casos de uso, puedes confiar en el comportamiento predeterminado de workbox-webpack-plugin sin configuración adicional y obtener un service worker equivalente al que proporciona sw-precache-webpack-plugin.

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

se puede cambiar a

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

Migraciones de sw-toolbox

Migra de sw-toolbox elaborado a mano a workbox-sw

Si usabas sw-toolbox directamente (en lugar de usarlo de forma implícita a través de la opción runtimeCaching de sw-precache), la migración a Workbox requiere algunos ajustes manuales para obtener el comportamiento equivalente. Para obtener más información, consulta la documentación de los módulos workbox-routing y workbox-strategies.

Estos son algunos fragmentos de código que te ayudarán a guiar la migración. Este código 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;

es equivalente a este código de Workbox:

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());

Cómo obtener ayuda

Prevemos que la mayoría de las migraciones a Workbox sean sencillas. Si tienes problemas que no se abordan en esta guía, abre un problema en GitHub para informarnos al respecto.