Von sw-precache oder sw-toolbox migrieren

Entwickler, die in der Vergangenheit sw-precache und/oder sw-toolbox verwendet haben, können ganz einfach auf die Workbox-Bibliotheken upgraden. Ein Upgrade auf Workbox bietet eine moderne, erweiterbare Umgebung mit verbessertem Debugging und verbesserter Ergonomie für Entwickler.

Änderungen an Ihrer bestehenden Konfiguration

Wenn Sie sw-precache verwenden, für das eine der folgenden Optionen konfiguriert ist, müssen Sie bei der Migration zu Workbox die folgenden Änderungen berücksichtigen.

Umbenannte Optionen

Der Konfigurationsparameter dynamicUrlToDependencies wurde in templatedURLs umbenannt.

Der Konfigurationsparameter staticFileGlobs wurde in globPatterns umbenannt.

Für den Konfigurationsparameter runtimeCaching wird ein aktualisierter Satz von Optionen verwendet, die den Namen entsprechen, die in den zugrunde liegenden Workbox-Modulen verwendet werden. Um zu veranschaulichen, was umbenannt wurde, zeigt diese sw-precache-Konfiguration:

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

entspricht dieser Workbox-Konfiguration:

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

Eingestellte Optionen

Platzhalterrouten im Express-Stil werden nicht mehr unterstützt. Wenn Sie Platzhalterrouten im Express-Stil entweder in der runtimeCaching-Konfiguration oder direkt in sw-toolbox verwendet haben, migrieren Sie bei Verwendung von Workbox zu einer entsprechenden Route mit regulären Ausdrücken.

sw-precache-Migrationen

Von der Befehlszeile „sw-precache“ zu „workbox-cli“

Für Entwickler, die die sw-precache-Befehlszeile verwenden und den Befehl entweder manuell oder im Rahmen eines npm scripts-basierten Build-Prozesses ausführen, ist die Verwendung des workbox-cli-Moduls die einfachste Möglichkeit für die Migration. Wenn du workbox-cli installierst, erhältst du Zugriff auf ein Binärprogramm namens workbox.

Die sw-precache-Befehlszeile unterstützt die Konfiguration über Befehlszeilen-Flags oder eine Konfigurationsdatei. Für die workbox-Befehlszeile müssen alle Konfigurationsoptionen in einer Konfigurationsdatei mit CommonJS module.exports angegeben werden.

Die workbox-Befehlszeile unterstützt eine Reihe verschiedener Modi. (Verwenden Sie workbox --help, um alle zu sehen.) Der Modus, der der Funktionalität von sw-precache am ehesten entspricht, ist jedoch generateSW. Ein Aufruf an die

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

können folgendermaßen ausgedrückt werden:

$ workbox generateSW workbox-config.js

Vom Knotenmodul „sw-precache“ zum Knotenmodul „workbox-build“

Entwickler, die die node API für sw-precache entweder als Teil eines gulp/Grunt-Workflows oder nur innerhalb eines benutzerdefinierten node-Build-Skripts verwenden, können zum workbox-build node-Modul wechseln.

Die Funktion generateSW() des Moduls workbox-build entspricht am ehesten der Funktion write() des Moduls sw-precache. Ein wesentlicher Unterschied besteht darin, dass generateSW() immer ein Promise-Objekt zurückgibt, während die alte write()-Funktion sowohl einen Callback als auch eine Promise-basierte Schnittstelle unterstützt.

gulp-Nutzung im Vergleich zu

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

kann geändert werden zu

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

Vom sw-precache-webpack-plugin zum Workbox-Webpack-Plug-in

Entwickler, die sw-precache-webpack-plugin im Rahmen ihres Webpack-Build-Prozesses verwenden, können im workbox-webpack-plugin-Modul zur GenerateSW-Klasse wechseln.

workbox-webpack-plugin lässt sich direkt in den Webpack-Build-Prozess einbinden und „weiß“ alle Assets, die mit einer bestimmten Kompilierung generiert wurden. Das bedeutet, dass Sie sich für viele Anwendungsfälle auf das Standardverhalten von workbox-webpack-plugin ohne zusätzliche Konfiguration verlassen und einen Service Worker abrufen können, der dem von sw-precache-webpack-plugin entspricht.

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

kann geändert werden zu

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

sw-toolbox-Migrationen

Von handgearbeiteten Sw-Toolbox zu Workbox-sw migrieren

Wenn Sie sw-toolbox direkt (anstatt implizit über die runtimeCaching-Option von sw-precache) verwendet haben, sind bei der Migration zu Workbox einige manuelle Anpassungen erforderlich, um das entsprechende Verhalten zu erzielen. Weitere Informationen finden Sie in der Dokumentation zu den Modulen workbox-routing und workbox-strategies.

Im Folgenden finden Sie einige Code-Snippets, die die Migration erleichtern. Dieser sw-toolbox-Code:

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;

entspricht diesem Workbox-Code:

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

Unterstützung erhalten

Wir gehen davon aus, dass die meisten Migrationen zu Workbox unkompliziert sein werden. Wenn Probleme auftreten, die nicht in diesem Leitfaden beschrieben sind, erheben Sie ein Problem in GitHub.