Deweloperzy, którzy wcześniej używali sw-precache
lub sw-toolbox
, mogą łatwo przejść na nową wersję biblioteki Workbox. Przejście na Workbox zapewni nowoczesne, rozszerzalne środowisko service worker oraz ulepszone debugowanie i ergonomię programistów.
Modyfikacje istniejącej konfiguracji
Jeśli używasz usługi sw-precache
skonfigurowanego z dowolną z poniższych opcji, podczas migracji do Workbox musisz uwzględnić poniższe zmiany.
Zmienione nazwy opcji
Nazwa parametru konfiguracji dynamicUrlToDependencies
została zmieniona na templatedURLs
.
Nazwa parametru konfiguracji staticFileGlobs
została zmieniona na globPatterns
.
Parametr konfiguracji runtimeCaching
przyjmuje zaktualizowany zestaw opcji odpowiadający nazwom używanym w bazowych modułach Workbox. Aby zilustrować zmianę nazwy, przedstawiamy tę konfigurację sw-precache
:
runtimeCaching: [{
urlPattern: /api/,
handler: 'fastest',
options: {
cache: {
name: 'my-api-cache',
maxEntries: 5,
maxAgeSeconds: 60,
},
},
}],
jest odpowiednikiem 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,
},
},
}],
Opcje wycofane
Trasy z symbolami wieloznacznymi w stylu ekspresowym nie są już obsługiwane. Jeśli używasz tras z symbolami wieloznacznymi w stylu Express w konfiguracji runtimeCaching
lub bezpośrednio w sw-toolbox
, przeprowadź migrację do równoważnej trasy opartej na wyrażeniach regularnych podczas korzystania z Workbox.
Migracje sw-precache
Od interfejsu wiersza poleceń sw-precache do workbox-cli
Dla programistów używających interfejsu wiersza poleceń sw-precache
(ręcznie lub w ramach procesu kompilacji w npm scripts
) najłatwiejszy sposób migracji będzie wykorzystanie modułu workbox-cli
. Instalując aplikację workbox-cli
, uzyskasz dostęp do pliku binarnego o nazwie workbox
.
Chociaż interfejs wiersza poleceń sw-precache
obsługuje konfigurowanie za pomocą flag wiersza poleceń lub pliku konfiguracji, interfejs wiersza poleceń workbox
wymaga, aby wszystkie opcje konfiguracji były zawarte w pliku konfiguracji przy użyciu CommonJS module.exports
.
Interfejs wiersza poleceń workbox
obsługuje wiele różnych trybów. (aby je wyświetlić, użyj usługi workbox --help
). Jednak tryb, który najlepiej pasuje do funkcji sw-precache
, to generateSW
. Wezwania do działania
$ sw-precache --config='sw-precache-config.js'
może być wyrażony jako
$ workbox generateSW workbox-config.js
Od modułu węzłów sw-precache do modułu węzła Workbox-build
Deweloperzy używający interfejsu node
API w sw-precache
, w ramach przepływu pracy gulp
/Grunt
lub tylko w ramach niestandardowego skryptu kompilacji node
, mogą przeprowadzić migrację, przechodząc na moduł workbox-build
node
.
Funkcja generateSW()
modułu workbox-build
jest najbardziej zgodna z funkcją write()
modułu sw-precache
. Główna różnica polega na tym, że funkcja generateSW()
zawsze zwraca obietnicę, a stara funkcja write()
obsługiwała zarówno wywołanie zwrotne, jak i interfejs oparty na obietnicy.
gulp
– wykorzystanie na poziomie
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.
});
});
Od sw-precache-webpack-plugin do wtyczki Workbox Webpack
Deweloperzy używający sw-precache-webpack-plugin
w ramach procesu kompilacji pakietu internetowego mogą przeprowadzić migrację, przełączając się na klasę GenerateSW
w module workbox-webpack-plugin
.
workbox-webpack-plugin
integruje się bezpośrednio z procesem kompilacji pakietu internetowego i „wie” o wszystkich zasobach wygenerowanych przez daną kompilację. Oznacza to, że w wielu przypadkach możesz polegać na domyślnym działaniu workbox-webpack-plugin
bez dodatkowej konfiguracji i uzyskać dostęp do skryptu service worker odpowiednika tego, który zapewnia 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.
}),
],
};
migracje z sw-toolbox
Migracja z ręcznie stworzonego pakietu narzędzi sw-toolbox do Workbox-sw
Jeśli używasz narzędzia sw-toolbox
bezpośrednio (a nie pośrednio za pomocą opcji runtimeCaching
w systemie sw-precache
), migracja do Workbox wymaga kilku ręcznych zmian w celu uzyskania podobnego działania. Więcej informacji znajdziesz w dokumentacji modułów workbox-routing
i workbox-strategies
.
Oto kilka fragmentów kodu, które ułatwią Ci przeprowadzenie migracji. Ten kod z aplikacji 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 odpowiednikiem tego kodu 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 łatwa. Jeśli napotkasz problemy, których nie ma w tym przewodniku, daj nam znać, otwierając je na GitHubie.