Migracja z sw-precache lub sw-toolbox

Deweloperzy, którzy wcześniej korzystali z wersji sw-precache lub sw-toolbox, mogą łatwo uaktualnić swoje biblioteki do rodziny bibliotek Workbox. Przejście na Workbox zapewni pracownikom nowoczesne, rozszerzalne środowisko obsługi klienta z ulepszonym debugowaniem i ergonomią dla programistów.

Modyfikacje istniejącej konfiguracji

Jeśli używasz sw-precache skonfigurowanego z dowolną z tych opcji, podczas migracji do Workbox musisz wziąć pod uwagę te zmiany.

Zmienione opcje

Nazwa parametru konfiguracji dynamicUrlToDependencies została zmieniona na templatedURLs.

Parametr konfiguracji staticFileGlobs został przemianowany na globPatterns.

Parametr konfiguracji runtimeCaching przyjmuje zaktualizowany zestaw opcji odpowiadających nazwom używanym w podstawowych modułach Workbox. Aby zilustrować, co zostało przemianowane, oto konfiguracja sw-precache:

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

jest równoważna tej konfiguracji 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,
    },
  },
}],

Wycofane opcje

Trasy z symbolami wieloznacznymi w stylu ekspresowym nie są już obsługiwane. Jeśli używasz tras z symbolami wieloznacznymi w stylu ekspresowym w konfiguracji runtimeCaching lub bezpośrednio w sw-toolbox, podczas korzystania z Workbox przeprowadź migrację na równoważną trasę z wyrażeniami regularnymi.

migracje sw-precache.

Z interfejsu wiersza poleceń sw-precache do interfejsu wiersza poleceń Workbox

Deweloperzy korzystający z interfejsu wiersza poleceń sw-precache (ręcznie lub w ramach procesu kompilacji opartego na npm scripts) znajdą najłatwiejszą metodę migracji w module workbox-cli. Po zainstalowaniu aplikacji workbox-cli uzyskasz dostęp do pliku binarnego workbox.

Chociaż interfejs wiersza poleceń sw-precache obsługiwał konfigurację za pomocą flag wiersza poleceń lub pliku konfiguracji, interfejs wiersza poleceń workbox wymaga podania wszystkich opcji konfiguracji w pliku konfiguracji przy użyciu CommonJS module.exports.

Interfejs wiersza poleceń workbox obsługuje kilka różnych trybów. (aby zobaczyć wszystkie, kliknij workbox --help). Tryb, który najbardziej przypomina funkcjonalność sw-precache, to generateSW. A więc telefon do

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

może być wyrażona jako

$ workbox generateSW workbox-config.js

Z modułu węzła sw-precache do modułu węzła workbox-build

Deweloperzy używający interfejsu API node w sw-precache (w ramach przepływu pracy gulp/Grunt lub tylko w ramach niestandardowego skryptu kompilacji node) mogą przeprowadzić migrację, przełączając się na moduł workbox-build node.

Funkcja generateSW() z modułu workbox-build najbardziej przypomina funkcję write() z modułu sw-precache. Jedną z głównych różnic jest to, że funkcja generateSW() zawsze zwraca obietnicę, podczas gdy stara funkcja write() obsługiwała zarówno wywołanie zwrotne, jak i interfejs oparty na obietnicach.

Wykorzystanie gulp w liniach

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

można zmienić na

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

Z wtyczki sw-precache-webpack-plugin do wtyczki Workbox webpack

Deweloperzy, którzy używają pakietu sw-precache-webpack-plugin w ramach procesu kompilacji webpack, mogą przejść na klasę GenerateSW w module workbox-webpack-plugin.

workbox-webpack-plugin integruje się bezpośrednio z procesem kompilacji webpack i „zna” wszystkie zasoby wygenerowane przez daną kompilację. Oznacza to, że w wielu przypadkach możesz polegać na domyślnym zachowaniu skryptu workbox-webpack-plugin bez dodatkowej konfiguracji i uzyskać skrypt usług podobny do skryptu sw-precache-webpack-plugin.

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

można zmienić na

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

sw-toolbox migrations

Przejście z ręcznie tworzonego sw-toolbox do workbox-sw

Jeśli używasz bezpośrednio sw-toolbox (a nie pośrednio za pomocą opcji runtimeCaching w sw-precache), migracja do Workbox wymaga wprowadzenia kilku ręcznych zmian, aby uzyskać takie samo działanie. Więcej informacji znajdziesz w dokumentacji dotyczącej modułów workbox-routingworkbox-strategies.

Oto kilka fragmentów kodu, które ułatwią Ci przeprowadzenie migracji. Ten kod 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;

jest równoważne z tym kodem 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());

Uzyskiwanie pomocy

Przewidujemy, że większość migracji do Workbox będzie prosta. Jeśli napotkasz problemy, których nie ma w tym przewodniku, otwórz zgłoszenie na GitHubie.