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.