Os desenvolvedores que já usaram sw-precache e/ou sw-toolbox têm um caminho de upgrade direto para a família de bibliotecas do Workbox. O upgrade para o Workbox vai proporcionar uma experiência moderna e extensível de service worker com melhor depuração e ergonomia do desenvolvedor.
Modificações na configuração atual
Se você estiver usando sw-precache configurado com qualquer uma das opções a seguir, precisará considerar as seguintes mudanças ao migrar para o Workbox.
Opções renomeadas
O parâmetro de configuração dynamicUrlToDependencies foi renomeado como templatedURLs.
O parâmetro de configuração staticFileGlobs foi renomeado como globPatterns.
O parâmetro de configuração runtimeCaching usa um conjunto atualizado de opções, correspondente aos nomes usados nos módulos do Workbox. Para ilustrar o que foi renomeado, esta configuração sw-precache:
runtimeCaching: [{
urlPattern: /api/,
handler: 'fastest',
options: {
cache: {
name: 'my-api-cache',
maxEntries: 5,
maxAgeSeconds: 60,
},
},
}],
é equivalente a esta configuração do 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,
},
},
}],
Opções obsoletas
Não há mais suporte para rotas curinga do estilo expresso. Se você usava rotas curinga no estilo do Express na configuração runtimeCaching ou diretamente em sw-toolbox, migre para uma rota de expressão regular equivalente ao usar o Workbox.
Migrações de sw-precache
Da CLI sw-precache para a workbox-cli
Os desenvolvedores que usam a interface de linha de comando sw-precache, executando o comando manualmente ou como parte de um processo de build baseado em npm scripts, vão descobrir que o uso do módulo workbox-cli é a maneira mais fácil de migrar. A instalação de workbox-cli vai dar acesso a um binário chamado workbox.
Embora a CLI sw-precache suporte a configuração usando flags de linha de comando ou um arquivo de configuração, a CLI workbox exige que todas as opções de configuração sejam fornecidas em um arquivo de configuração usando CommonJS module.exports.
A CLI workbox é compatível com vários modos diferentes. Use workbox --help para ver todas. Mas o modo que mais se aproxima da funcionalidade de sw-precache é generateSW. Uma chamada para
$ sw-precache --config='sw-precache-config.js'
pode ser expressa como
$ workbox generateSW workbox-config.js
Do módulo de nó sw-precache para o módulo de nó workbox-build
Os desenvolvedores que usam a node API para sw-precache como parte de um fluxo de trabalho gulp/Grunt ou apenas em um script de compilação node personalizado podem migrar para o workbox-build node.
A função generateSW() do módulo workbox-build corresponde mais à função write() do módulo sw-precache. Uma diferença importante é que generateSW() sempre retorna uma promessa, enquanto a antiga função write() oferece suporte a um callback e a uma interface baseada em promessas.
Uso de gulp, por exemplo:
const swPrecache = require('sw-precache');
gulp.task('generate-service-worker', function () {
return swPrecache.write('service-worker.js', {
// Config options.
});
});
pode ser alterado para
const workboxBuild = require('workbox-build');
gulp.task('generate-service-worker', function () {
return workboxBuild.generateSW({
// Config options.
});
});
Do sw-precache-webpack-plugin para o plug-in Workbox webpack
Os desenvolvedores que usam o sw-precache-webpack-plugin como parte do processo de build do webpack podem migrar para a classe GenerateSW no módulo workbox-webpack-plugin.
A workbox-webpack-plugin se integra diretamente ao processo de build do Webpack e "conhece" todos os recursos gerados por uma determinada compilação. Isso significa que, para muitos casos de uso, você pode confiar no comportamento padrão de workbox-webpack-plugin sem configuração adicional e receber um service worker equivalente ao que sw-precache-webpack-plugin oferece.
const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin');
const webpackConfig = {
// ...
plugins: [
new SWPrecacheWebpackPlugin({
dontCacheBustUrlsMatching: /\.\w{8}\./,
filename: 'service-worker.js',
}),
],
};
pode ser alterado para
const {GenerateSW} = require('workbox-webpack-plugin');
const webpackConfig = {
// ...
plugins: [
new GenerateSW({
// Config options, if needed.
}),
],
};
migrações de sw-toolbox
Migrar de sw-toolbox manual para workbox-sw
Se você estava usando sw-toolbox diretamente (em vez de usar implicitamente pela opção runtimeCaching do sw-precache), a migração para o Workbox exige alguns ajustes manuais para ter o comportamento equivalente. Para mais contexto, leia a documentação dos módulos workbox-routing e workbox-strategies.
Aqui estão alguns snippets de código para ajudar a orientar a migração. Esse 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;
é equivalente a este código do 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());
Receber ajuda
A maioria das migrações para o Workbox deve ser simples. Se você tiver problemas que não foram abordados neste guia, abra um problema (link em inglês) no GitHub.