Gli sviluppatori che hanno già utilizzato sw-precache
e/o sw-toolbox
dispongono di un percorso di upgrade diretto alla famiglia di librerie Workbox. L'upgrade a Workbox offrirà un'esperienza moderna ed estensibile dei lavoratori dei servizi con debug ed ergonomia migliori per gli sviluppatori.
Modifiche alla configurazione esistente
Se utilizzi sw-precache
configurato con una delle opzioni seguenti, dovrai prendere in considerazione le modifiche indicate di seguito durante la migrazione a Workbox.
Opzioni rinominate
Il parametro di configurazione dynamicUrlToDependencies
è stato rinominato templatedURLs
.
Il parametro di configurazione staticFileGlobs
è stato rinominato globPatterns
.
Il parametro di configurazione runtimeCaching
richiede un insieme aggiornato di opzioni, che corrispondono ai nomi utilizzati nei moduli di Workbox sottostanti. Per illustrare cosa è stato rinominato, questa configurazione di sw-precache
:
runtimeCaching: [{
urlPattern: /api/,
handler: 'fastest',
options: {
cache: {
name: 'my-api-cache',
maxEntries: 5,
maxAgeSeconds: 60,
},
},
}],
è equivalente alla seguente configurazione di 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,
},
},
}],
Opzioni deprecate
Le route con caratteri jolly in stile Express non sono più supportate. Se utilizzavi route con caratteri jolly in stile Express nella configurazione runtimeCaching
o direttamente in sw-toolbox
, esegui la migrazione a una route di espressione regolare equivalente quando utilizzi Workbox.
migrazioni sw-precache
Dall'interfaccia a riga di comando sw-precache a workbox-cli
Per gli sviluppatori che utilizzano l'interfaccia a riga di comando sw-precache
, eseguendo il comando manualmente o nell'ambito di un processo di compilazione basato su npm scripts
, l'utilizzo del modulo workbox-cli
sarà il modo più semplice per eseguire la migrazione. L'installazione di workbox-cli
ti consentirà di accedere a un programma binario chiamato workbox
.
Mentre l'interfaccia a riga di comando sw-precache
supporta la configurazione tramite flag della riga di comando o file di configurazione, l'interfaccia a riga di comando workbox
richiede che tutte le opzioni di configurazione siano fornite in un file di configurazione utilizzando CommonJS module.exports
.
L'interfaccia a riga di comando workbox
supporta diverse modalità. Usa workbox --help
per vederli tutti. Tuttavia, la modalità che più si avvicina alla funzionalità di sw-precache
è generateSW
. Quindi una chiamata
$ sw-precache --config='sw-precache-config.js'
può essere espresso come
$ workbox generateSW workbox-config.js
Dal modulo nodo sw-precache al modulo nodo workbox-build
Gli sviluppatori che utilizzano l'API node
per sw-precache
, nell'ambito di un flusso di lavoro gulp
/Grunt
o solo all'interno di uno script di build node
personalizzato, possono eseguire la migrazione passando al modulo workbox-build
node
.
La funzione generateSW()
del modulo workbox-build
si avvicina maggiormente alla funzione write()
del modulo sw-precache
. Una differenza fondamentale è che generateSW()
restituisce sempre un valore Promise, mentre la precedente funzione write()
supportava sia un callback sia un'interfaccia basata su Promise.
di utilizzo di gulp
in linea con la
const swPrecache = require('sw-precache');
gulp.task('generate-service-worker', function () {
return swPrecache.write('service-worker.js', {
// Config options.
});
});
può essere modificato in
const workboxBuild = require('workbox-build');
gulp.task('generate-service-worker', function () {
return workboxBuild.generateSW({
// Config options.
});
});
Da sw-precache-webpack-plugin al plug-in Workbox webpack
Gli sviluppatori che usano sw-precache-webpack-plugin
come parte del processo di compilazione di webpack possono eseguire la migrazione passando alla classe GenerateSW
all'interno del modulo workbox-webpack-plugin
.
workbox-webpack-plugin
si integra direttamente con il processo di compilazione del webpack ed è a conoscenza di tutte le risorse generate da una determinata compilazione. Ciò significa che, per molti casi d'uso, puoi fare affidamento sul comportamento predefinito di workbox-webpack-plugin
senza configurazione aggiuntiva e ottenere un service worker equivalente a quello fornito da sw-precache-webpack-plugin
.
const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin');
const webpackConfig = {
// ...
plugins: [
new SWPrecacheWebpackPlugin({
dontCacheBustUrlsMatching: /\.\w{8}\./,
filename: 'service-worker.js',
}),
],
};
può essere modificato in
const {GenerateSW} = require('workbox-webpack-plugin');
const webpackConfig = {
// ...
plugins: [
new GenerateSW({
// Config options, if needed.
}),
],
};
migrazioni di sw-toolbox
Eseguire la migrazione da strumenti sw artigianali a workbox-sw
Se utilizzavi direttamente sw-toolbox
(anziché usarlo implicitamente tramite l'opzione runtimeCaching
di sw-precache
), la migrazione a Workbox richiede alcune modifiche manuali per ottenere il comportamento equivalente. Per maggiori informazioni, leggi la documentazione relativa ai moduli workbox-routing
e workbox-strategies
.
Ecco alcuni snippet di codice per guidare la migrazione. Questo codice di 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 al seguente codice di 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());
Richiesta di aiuto
Prevediamo che la maggior parte delle migrazioni a Workbox sarà diretta. Se riscontri problemi non trattati in questa guida, comunicacelo aprendo un problema su GitHub.