Workbox bietet zwei Webpack-Plug-ins: eines, das einen vollständigen Service Worker für Sie generiert, und eines, das eine Liste von Assets zum Vorab-Caching generiert, die in eine Service Worker-Datei eingefügt wird.
Die Plug-ins sind als zwei Klassen im Modul workbox-webpack-plugin
implementiert, die GenerateSW
und InjectManifest
heißen. Die Antworten auf die folgenden Fragen können Ihnen bei der Auswahl des richtigen Plug-ins und der richtigen Konfiguration helfen.
Welches Plug-in ist das richtige?
GenerateSW
Das GenerateSW
-Plug-in erstellt eine Service Worker-Datei für Sie und fügt sie der Webpack-Asset-Pipeline hinzu.
Verwendung von GenerateSW
- Sie möchten Dateien vorab im Cache speichern.
- Ihre Anforderungen an das Caching von Laufzeiten sind einfach.
Wann GenerateSW
NICHT verwendet werden sollte
- Sie möchten andere Service Worker-Funktionen verwenden, z.B. Web Push.
- Sie möchten zusätzliche Scripts importieren oder zusätzliche Logik für benutzerdefinierte Caching-Strategien hinzufügen.
InjectManifest
Das InjectManifest
-Plug-in generiert eine Liste der URLs, die vorzeitig im Cache gespeichert werden sollen, und fügt dieses Pre-Cache-Manifest einer vorhandenen Service Worker-Datei hinzu. Andernfalls bleibt die Datei unverändert.
Verwendung von InjectManifest
- Sie möchten mehr Kontrolle über Ihren Service Worker.
- Sie möchten Dateien vorab im Cache speichern.
- Sie müssen das Routing und die Strategien anpassen.
- Sie möchten Ihren Dienst-Worker mit anderen Plattformfunktionen verwenden, z.B. Web Push.
Wann InjectManifest
NICHT verwendet werden sollte
- Sie möchten einen Service Worker am einfachsten zu Ihrer Website hinzufügen.
GenerateSW-Plug-in
Sie können das GenerateSW
-Plug-in Ihrer Webpack-Konfiguration so hinzufügen:
// Inside of webpack.config.js:
const {GenerateSW} = require('workbox-webpack-plugin');
module.exports = {
// Other webpack config...
plugins: [
// Other plugins...
new GenerateSW({
// These are some common options, and not all are required.
// Consult the docs for more info.
exclude: [/.../, '...'],
maximumFileSizeToCacheInBytes: ...,
navigateFallback: '...',
runtimeCaching: [{
// Routing via a matchCallback function:
urlPattern: ({request, url}) => ...,
handler: '...',
options: {
cacheName: '...',
expiration: {
maxEntries: ...,
},
},
}, {
// Routing via a RegExp:
urlPattern: new RegExp('...'),
handler: '...',
options: {
cacheName: '...',
plugins: [..., ...],
},
}],
skipWaiting: ...,
}),
],
};
Dadurch wird ein Service Worker mit einer Pre-Caching-Einrichtung für alle von Ihrer Konfiguration erfassten Webpack-Assets und den bereitgestellten Laufzeit-Caching-Regeln generiert.
Eine vollständige Liste der Konfigurationsoptionen finden Sie in der Referenzdokumentation.
InjectManifest
Plug-in
So fügen Sie Ihrer Webpack-Konfiguration das InjectManifest
-Plug-in hinzu:
// Inside of webpack.config.js:
const {InjectManifest} = require('workbox-webpack-plugin');
module.exports = {
// Other webpack config...
plugins: [
// Other plugins...
new InjectManifest({
// These are some common options, and not all are required.
// Consult the docs for more info.
exclude: [/.../, '...'],
maximumFileSizeToCacheInBytes: ...,
swSrc: '...',
}),
],
};
Dadurch wird ein Pre-Cache-Manifest basierend auf den von Ihrer Konfiguration abgerufenen Webpack-Assets erstellt und in die gebundelte und kompilierte Service Worker-Datei eingefügt.
Eine vollständige Liste der Konfigurationsoptionen finden Sie in der Referenzdokumentation.
Zusätzliche Informationen
Eine Anleitung zur Verwendung der Plug-ins im Kontext eines größeren Webpack-Builds finden Sie im Abschnitt Progressive Web Application der Webpack-Dokumentation.
Typen
GenerateSW
Diese Klasse unterstützt das Erstellen einer neuen, sofort einsatzbereiten Service Worker-Datei im Rahmen des Webpack-Kompilierungsprozesses.
Verwenden Sie eine Instanz von GenerateSW
im plugins
-Array einer Webpack-Konfiguration.
// The following lists some common options; see the rest of the documentation
// for the full set of options and defaults.
new GenerateSW({
exclude: [/.../, '...'],
maximumFileSizeToCacheInBytes: ...,
navigateFallback: '...',
runtimeCaching: [{
// Routing via a matchCallback function:
urlPattern: ({request, url}) => ...,
handler: '...',
options: {
cacheName: '...',
expiration: {
maxEntries: ...,
},
},
}, {
// Routing via a RegExp:
urlPattern: new RegExp('...'),
handler: '...',
options: {
cacheName: '...',
plugins: [..., ...],
},
}],
skipWaiting: ...,
});
Attribute
-
Konstruktor
void
Erstellt eine Instanz von GenerateSW.
Die
constructor
-Funktion sieht so aus:(config?: GenerateSWConfig) => {...}
-
config
GenerateSWConfig optional
-
Gibt zurück
-
-
config
GenerateSWConfig
Attribute
-
additionalManifestEntries
(string | ManifestEntry)[] optional
Eine Liste der Einträge, die vor dem Caching gespeichert werden sollen, zusätzlich zu allen Einträgen, die im Rahmen der Build-Konfiguration generiert werden.
-
babelPresetEnvTargets
string[] optional
Standardwert: ["chrome >= 56"]
Die Ziele, die beim Transpilieren des Service Worker-Bundles an
babel-preset-env
übergeben werden sollen. -
cacheId
String optional
Eine optionale ID, die Cachenamen vorangestellt werden soll. Dies ist vor allem für die lokale Entwicklung nützlich, bei der mehrere Websites von derselben
http://localhost:port
-Quelle ausgeliefert werden können. -
chunks
string[] optional
Ein oder mehrere Blocknamen, deren entsprechende Ausgabedateien in das Precache-Manifest aufgenommen werden sollen.
-
cleanupOutdatedCaches
boolescher Wert optional
Der Standardwert ist false.
Ob Workbox versuchen soll, von älteren, inkompatiblen Versionen erstellte Pre-Caches zu identifizieren und zu löschen.
-
clientsClaim
boolescher Wert optional
Standardwert: false
Gibt an, ob der Dienst-Worker vorhandene Clients steuern soll, sobald er aktiviert wird.
-
directoryIndex
String optional
Wenn eine Navigationsanfrage für eine URL, die auf
/
endet, nicht mit einer vorab im Cache gespeicherten URL übereinstimmt, wird dieser Wert an die URL angehängt und auf Übereinstimmung mit dem vorab im Cache gespeicherten Wert geprüft. Hier sollte festgelegt werden, was Ihr Webserver für seinen Verzeichnisindex verwendet. -
disableDevLogs
Boolescher Wert optional
Standardwert: false
-
dontCacheBustURLsMatching
Regex optional
Für Assets, die diesem Muster entsprechen, wird davon ausgegangen, dass sie über ihre URL eindeutig versioniert sind. Sie werden von der normalen HTTP-Cache-Busting-Funktion ausgenommen, die beim Befüllen des Pre-Caches verwendet wird. Es ist zwar nicht erforderlich, aber wenn der vorhandene Build-Prozess bereits einen
[hash]
-Wert in jeden Dateinamen einfügt, sollten Sie einen RegExp-Wert angeben, der dies erkennt, da dadurch die beim Precaching verbrauchte Bandbreite reduziert wird. -
Ausschließen
(string | RegExp | function)[] optional
Ein oder mehrere spezifische Angaben, mit denen Assets aus dem Pre-Cache-Manifest ausgeschlossen werden. Die Interpretation erfolgt nach denselben Regeln wie bei der Standardoption
exclude
vonwebpack
. Wenn keine Angabe erfolgt, beträgt der Standardwert[/\.map$/, /^manifest.*\.js$]
. -
excludeChunks
string[] optional
Ein oder mehrere Chunk-Namen, deren entsprechende Ausgabedateien aus dem Pre-Cache-Manifest ausgeschlossen werden sollen.
-
ignoreURLParametersMatching
RegExp[] optional
Alle Suchparameternamen, die mit einem der Regex-Objekte in diesem Array übereinstimmen, werden entfernt, bevor nach einer Übereinstimmung für die Vorab-Caching-Funktion gesucht wird. Das ist nützlich, wenn Ihre Nutzer URLs anfordern, die beispielsweise URL-Parameter enthalten, mit denen die Quelle der Zugriffe erfasst wird. Wenn keine Angabe erfolgt, beträgt der Standardwert
[/^utm_/, /^fbclid$/]
. -
importScripts
string[] optional
Eine Liste der JavaScript-Dateien, die in der generierten Service Worker-Datei an
importScripts()
übergeben werden müssen. Das ist nützlich, wenn Sie die Service Worker-Datei der obersten Ebene von Workbox erstellen lassen möchten, aber zusätzlichen Code wie einen Push-Ereignis-Listener einfügen möchten. -
importScriptsViaChunks
string[] optional
Ein oder mehrere Namen von Webpack-Blöcken. Der Inhalt dieser Chunks wird über einen Aufruf von
importScripts()
in den generierten Service Worker aufgenommen. -
enthalten
(string | RegExp | function)[] optional
Ein oder mehrere spezifische Angaben, mit denen Assets in das Pre-Cache-Manifest aufgenommen werden. Die Interpretation erfolgt nach denselben Regeln wie bei der Standardoption
include
vonwebpack
. -
inlineWorkboxRuntime
boolescher Wert optional
Der Standardwert ist false.
Gibt an, ob der Laufzeitcode für die Workbox-Bibliothek in den Dienst-Worker der obersten Ebene aufgenommen oder in eine separate Datei aufgeteilt werden soll, die zusammen mit dem Dienst-Worker bereitgestellt werden muss. Wenn Sie die Laufzeit getrennt halten, müssen Nutzer den Workbox-Code nicht jedes Mal neu herunterladen, wenn sich Ihr Service Worker der obersten Ebene ändert.
-
manifestEntries
ManifestEntry[] optional
-
manifestTransforms
ManifestTransform[] optional
Eine oder mehrere Funktionen, die nacheinander auf das generierte Manifest angewendet werden. Wenn auch
modifyURLPrefix
oderdontCacheBustURLsMatching
angegeben werden, werden die entsprechenden Transformationen zuerst angewendet. -
maximumFileSizeToCacheInBytes
Zahl optional
Der Standardwert ist 2097152.
Mit diesem Wert lässt sich die maximale Größe von Dateien festlegen, die vorab im Cache gespeichert werden. Dadurch wird verhindert, dass Sie versehentlich sehr große Dateien im Cache speichern, die möglicherweise versehentlich mit einem Ihrer Muster übereinstimmen.
-
Modus
String optional
Wenn „production“ festgelegt ist, wird ein optimiertes Service Worker-Bundle ohne Informationen zur Fehlerbehebung erstellt. Wenn hier nicht explizit konfiguriert, wird der in der aktuellen
webpack
-Kompilierung konfiguriertemode
-Wert verwendet. -
modifyURLPrefix
object optional
Ein Objekt, das Stringpräfixe zu Ersatzstringwerten zuordnet. So können Sie beispielsweise ein Pfadpräfix aus einem Manifesteintrag entfernen oder hinzufügen, wenn Ihre Webhosting-Einrichtung nicht mit der Konfiguration Ihres lokalen Dateisystems übereinstimmt. Als flexiblere Alternative können Sie die Option
manifestTransforms
verwenden und eine Funktion angeben, die die Einträge im Manifest mithilfe der von Ihnen angegebenen Logik ändert.Nutzungsbeispiel:
// Replace a '/dist/' prefix with '/', and also prepend // '/static' to every URL. modifyURLPrefix: { '/dist/': '/', '': '/static', }
-
String optional
Der Standardwert ist: null.
Wenn Sie diese Option angeben, werden alle Navigationsanfragen für URLs, die nicht vorab im Cache gespeichert sind, mit dem HTML-Code an der angegebenen URL erfüllt. Du musst die URL eines HTML-Dokuments übergeben, das in deinem Pre-Cache-Manifest aufgeführt ist. Diese Funktion ist für ein Szenario mit einer Single-Page-App gedacht, bei dem für alle Navigationen eine gemeinsame App-Shell-HTML verwendet werden soll.
-
RegExp[] optional
Ein optionales Array von regulären Ausdrücken, das einschränkt, für welche URLs das konfigurierte
navigateFallback
-Verhalten gilt. Dies ist nützlich, wenn nur ein Teil der URLs Ihrer Website als Teil einer Single-Page-App behandelt werden soll. Wenn sowohlnavigateFallbackDenylist
als auchnavigateFallbackAllowlist
konfiguriert sind, hat die Deaktivierungsliste Vorrang.Hinweis: Diese regulären Ausdrücke können bei einer Navigation anhand jeder Ziel-URL ausgewertet werden. Vermeiden Sie komplexe RegExp-Vorgänge. Andernfalls kann es für Nutzer zu Verzögerungen beim Navigieren auf Ihrer Website kommen.
-
RegExp[] optional
Ein optionales Array von regulären Ausdrücken, das einschränkt, für welche URLs das konfigurierte
navigateFallback
-Verhalten gilt. Dies ist nützlich, wenn nur ein Teil der URLs Ihrer Website als Teil einer Single-Page-App behandelt werden soll. Wenn sowohlnavigateFallbackDenylist
als auchnavigateFallbackAllowlist
konfiguriert sind, hat die Deaktivierungsliste Vorrang.Hinweis: Diese regulären Ausdrücke können bei einer Navigation anhand jeder Ziel-URL ausgewertet werden. Vermeiden Sie komplexe RegExp-Vorgänge. Andernfalls kann es für Nutzer zu Verzögerungen beim Navigieren auf Ihrer Website kommen.
-
boolescher Wert optional
Der Standardwert ist false.
Ob die Navigationsvorab-Ladefunktion im generierten Dienst-Worker aktiviert werden soll. Wenn „true“ festgelegt ist, müssen Sie auch
runtimeCaching
verwenden, um eine geeignete Antwortstrategie einzurichten, die Navigationsanfragen abgleicht, und die vorab geladene Antwort zu verwenden. -
offlineGoogleAnalytics
boolean | GoogleAnalyticsInitializeOptions optional
Standardwert: false
Steuert, ob die Unterstützung für Google Analytics Offline berücksichtigt wird. Bei
true
wird der Aufruf desinitialize()
vonworkbox-google-analytics
dem generierten Service Worker hinzugefügt. Wenn Sie einenObject
festlegen, wird dieses Objekt an deninitialize()
-Aufruf übergeben, sodass Sie das Verhalten anpassen können. -
runtimeCaching
RuntimeCaching[] optional
Wenn Sie die Build-Tools von Workbox zum Generieren Ihres Dienst-Workers verwenden, können Sie eine oder mehrere Laufzeit-Caching-Konfigurationen angeben. Diese werden dann mithilfe der von Ihnen definierten Übereinstimmungs- und Handlerkonfiguration in
workbox-routing.registerRoute
-Aufrufe umgewandelt.Eine vollständige Liste der Optionen finden Sie in der Dokumentation zu
workbox-build.RuntimeCaching
. Das folgende Beispiel zeigt eine typische Konfiguration mit zwei definierten Laufzeitrouten: -
skipWaiting
boolescher Wert optional
Standardwert: false
Gibt an, ob dem generierten Dienst-Worker ein unbedingter Aufruf von
skipWaiting()
hinzugefügt werden soll. Wennfalse
, wird stattdessen einmessage
-Listener hinzugefügt. So können ClientseitenskipWaiting()
auslösen, indempostMessage({type: 'SKIP_WAITING'})
auf einen wartenden Dienstworker aufgerufen wird. -
sourcemap
boolescher Wert optional
Standardwert: true
Gibt an, ob eine Sourcemap für die generierten Service Worker-Dateien erstellt werden soll.
-
swDest
String optional
Standardwert: "service-worker.js"
Der Asset-Name der Service Worker-Datei, die von diesem Plug-in erstellt wurde.
InjectManifest
Diese Klasse unterstützt das Kompilieren einer über swSrc
bereitgestellten Service Worker-Datei und das Einschleusen einer Liste von URLs und Versionsinformationen für das Pre-Caching basierend auf der Webpack-Asset-Pipeline in diesen Service Worker.
Verwenden Sie eine Instanz von InjectManifest
im plugins
-Array einer Webpack-Konfiguration.
Dieses Plug-in führt nicht nur das Manifest ein, sondern kompiliert auch die swSrc
-Datei mit den Optionen aus der Haupt-Webpack-Konfiguration.
// The following lists some common options; see the rest of the documentation
// for the full set of options and defaults.
new InjectManifest({
exclude: [/.../, '...'],
maximumFileSizeToCacheInBytes: ...,
swSrc: '...',
});
Attribute
-
Konstruktor
void
Erstellt eine Instanz von InjectManifest.
Die
constructor
-Funktion sieht so aus:(config: WebpackInjectManifestOptions) => {...}
-
config
-
Gibt zurück
-
-
config
Attribute
default
Typ
Objekt
Attribute
-
GenerateSW
Abfrage
-
InjectManifest
Abfrage