Beim Generieren von Service-Mitarbeitern ist der einfachste Weg, die gewünschte Richtlinie zu erhalten, sw-precache
mit sw-toolbox
.
Beim Generieren eines neuen Service-Worker mit sw-precache
können Sie auch den Code sw-toolbox
am Ende der generierten Datei erhalten, indem Sie die richtigen Konfigurationsoptionen übergeben.
Nach den sw-precache Documentation:
Das sw-precache
Modul verfügt über die Fähigkeit, den sw-toolbox
Code und Konfiguration neben seiner eigenen Konfiguration aufzunehmen. Mit der Konfigurationsoption runtimeCaching
in sw-precache
(see below) ist eine Verknüpfung möglich, die Sie manuell ausführen können, indem Sie in Ihrem Service Worker importieren und Ihre eigenen Routing-Regeln schreiben.
Dies ist ein Beispiel für die runtimeCaching
Option auf dem sw-precache
documentation zeigte:
runtimeCaching: [{
urlPattern: /^https:\/\/example\.com\/api/,
handler: 'networkFirst'
}, {
urlPattern: /\/articles\//,
handler: 'fastest',
options: {
cache: {
maxEntries: 10,
name: 'articles-cache'
}
}
}]
Sie diese Option, neben der Konfiguration der Wahl verwenden können.
Zum Beispiel können Sie eine Konfigurationsdatei verwenden, wie in den documentation erklären:
ist es Unterstützung für die Verwendung --config komplexe Konfigurationen übergeben. Alle Optionen aus der Datei können über ein Befehlszeilenflag überschrieben werden. Es wird dringend empfohlen, eine externe JavaScript-Datei zu übergeben, die die Konfiguration über module.exports definiert. Zum Beispiel sei angenommen, es gibt einen path/to/sw-precache-config.js-Datei, die enthält:
module.exports = {
staticFileGlobs: [
'app/css/**.css',
'app/**.html',
'app/images/**.*',
'app/js/**.js'
],
stripPrefix: 'app/',
runtimeCaching: [{
urlPattern: /this\\.is\\.a\\.regex/,
handler: 'networkFirst'
}]
};
Diese Datei mit der Kommandozeilen-Schnittstelle weitergegeben werden kann, aber auch die ausführliche Option Einstellung, über
Dies bietet die größte Flexibilität, z. B. die Bereitstellung eines regulären Ausdrucks für die Option runtimeCaching.urlPattern.
Oder Sie können eine JSON-Datei verwenden:
Wir unterstützen auch in einer JSON-Datei für --config vorbei, obwohl dies weniger Flexibilität:
{
"staticFileGlobs": [
"app/css/**.css",
"app/**.html",
"app/images/**.*",
"app/js/**.js"
],
"stripPrefix": "app/",
"runtimeCaching": [{
"urlPattern": "/express/style/path/(.*)",
"handler": "networkFirst"
}]
}
Dieses Beispiel verwendet die JS-Datei für die Konfigurationsoptionen:
$ sw-precache --config=path/to/sw-precache-config.js --verbose
Nach dem Ausführen des Befehls und Generieren des Service-Arbeiters mit diesen Konfigurationen können Sie die Precache und Richtlinien viel einfacher als mit nur sw-precache
umgehen.
Sie können Ihre Richtlinien direkt in der Datei konfigurieren oder sie manuell am Ende Ihres Service-Worker-Codes hinzufügen. Hier
ist das Beispiel des unteren Teils des generierten Codes:
//sw-precache generated code...
// *** Start of auto-included sw-toolbox code. ***
/*
Copyright 2016 Google Inc. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
//(!function(e){if("object"==typeof exports&&"undefined"!=typeof module))...
// *** End of auto-included sw-toolbox code. ***
// Runtime cache configuration, using the sw-toolbox library.
toolbox.router.get(/this\\.is\\.a\\.regex/, toolbox.networkFirst, {});
toolbox.options.debug = true;
//Here you can configure your precache:
toolbox.precache([
'/',
'/assets/background.png',
'/assets/logo.png',
'/assets/application.css',
]);
//And here you can configure your policies for any route and asset:
toolbox.router.get('/', toolbox.fastest);
toolbox.router.get('/assets/background.png', toolbox.fastest);
toolbox.router.get('/assets/logo.png', toolbox.fastest);
//Here is the Network First example
toolbox.router.get('/myapp/index.html', toolbox.networkFirst);
Ich habe das viel effektiver und flexibler zu finden als mit nur sw-precache
.
Hier finden Sie die sw-toolbox Usage Guide für weitere Informationen über die Konfiguration.
Ist das Problem, dass beim Laden Ihrer Site-Benutzer immer die zwischengespeicherte Version erhalten, oder wenn beim Aktualisieren des Service-Worker-Benutzers die neuen Service-Worker nicht ändern, bis ihre zweite Seite geladen wird? – abraham
@abraham, danke für den Kommentar. Das wäre die zweite Option. Wenn ich beispielsweise meine Website mit einem neuen Artikel (und folglich dem Worker) aktualisiere, werden die Benutzer keine Änderungen sehen, bis sie ein zweites Mal die gleiche Seite oder wahrscheinlich eine andere Seite auf der Site laden. –
Mögliches Duplikat, da dies mit dem gleichen Problem zu tun hat, das hier beschrieben wird: http: // stackoverflow.com/questions/41422474/new-version-available-mit-service-worker-und-sw-precache – lax1089