Workbox proporciona dos complementos de webpack: uno que genera un service worker completo y otro que genera una lista de recursos para almacenar previamente en caché que se inserta en un archivo de service worker.
Los complementos se implementan como dos clases en el módulo workbox-webpack-plugin
, llamadas GenerateSW
y InjectManifest
. Las respuestas a las siguientes preguntas pueden ayudarte a elegir el
complemento y la configuración correctos.
Qué complemento usar
GenerateSW
El complemento GenerateSW
creará un archivo de service worker por ti y
lo agregará a la canalización de recursos de webpack.
Cuándo usar GenerateSW
- Quieres almacenar en caché los archivos de antemano.
- Tienes necesidades de almacenamiento en caché del entorno de ejecución simples.
Cuándo NO usar GenerateSW
- Quieres usar otras funciones de Service Worker (es decir, Web Push).
- Quieres importar secuencias de comandos adicionales o agregar lógica adicional para estrategias de almacenamiento en caché personalizadas.
InjectManifest
El complemento InjectManifest
generará una lista de URLs para almacenar previamente en caché y
añadirá ese manifiesto de almacenamiento previo en caché a un archivo de service worker
existente. De lo contrario, dejará el archivo tal como está.
Cuándo usar InjectManifest
- Quieres tener más control sobre tu trabajador de servicio.
- Quieres almacenar en caché previamente los archivos.
- Debes personalizar el enrutamiento y las estrategias.
- Quieres usar el service worker con otras funciones de la plataforma (p.ej., Web Push).
Cuándo NO usar InjectManifest
- Quieres la ruta más fácil para agregar un service worker a tu sitio.
Generar complemento SW
Puedes agregar el complemento GenerateSW
a tu configuración de Webpack de la siguiente manera:
// 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: ...,
}),
],
};
Esto generará un service worker con la configuración de almacenamiento en caché previo para todos los recursos de webpack que detecte tu configuración y las reglas de almacenamiento en caché del entorno de ejecución proporcionadas.
Puedes encontrar un conjunto completo de opciones de configuración en la documentación de referencia.
Complemento de InjectManifest
Puedes agregar el complemento InjectManifest
a tu configuración de Webpack de la siguiente manera:
// 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: '...',
}),
],
};
Esto creará un manifiesto de almacenamiento en caché basado en los recursos de webpack que detectó tu configuración y lo insertará en tu archivo de service worker compilado y empaquetado.
Puedes encontrar un conjunto completo de opciones de configuración en la documentación de referencia.
Información adicional
Puedes encontrar orientación para usar los complementos en el contexto de una compilación de webpack más grande en la sección "Aplicación web progresiva" de la documentación de webpack.
Tipos
GenerateSW
Esta clase admite la creación de un nuevo archivo de service worker listo para usar como parte del proceso de compilación del paquete web.
Usa una instancia de GenerateSW
en el array plugins
de una configuración de webpack.
// 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: ...,
});
Propiedades
-
constructor
void
Crea una instancia de GenerateSW.
La función
constructor
se ve de la siguiente manera:(config?: GenerateSWConfig) => {...}
-
config
GenerateSWConfig opcional
-
muestra
-
-
config
GenerateSWConfig
Propiedades
-
additionalManifestEntries
(cadena | ManifestEntry)[] opcional
Es una lista de entradas que se almacenarán en caché previamente, además de las entradas que se generan como parte de la configuración de compilación.
-
babelPresetEnvTargets
string[] opcional
El valor predeterminado es: ["chrome >= 56"]
Los objetivos que se pasarán a
babel-preset-env
cuando se transpile el paquete del trabajador de servicio. -
cacheId
string opcional
Un ID opcional que se antepondrá a los nombres de la caché. Esto es útil principalmente para el desarrollo local, en el que se pueden entregar varios sitios desde el mismo origen de
http://localhost:port
. -
trozos
string[] opcional
Uno o más nombres de fragmentos cuyos archivos de salida correspondientes deben incluirse en el manifiesto de almacenamiento previo en caché.
-
cleanupOutdatedCaches
booleano opcional
El valor predeterminado es false.
Define si Workbox debe intentar identificar y borrar las precachés creadas por versiones anteriores incompatibles.
-
clientsClaim
booleano opcional
El valor predeterminado es false.
Indica si el service worker debe comenzar a controlar cualquier cliente existente en cuanto se active.
-
directoryIndex
cadena opcional
Si una solicitud de navegación de una URL que termina en
/
no coincide con una URL almacenada en caché previamente, este valor se agregará a la URL y se verificará si corresponde a una coincidencia en caché previamente. Se debe configurar según lo que usa tu servidor web para su índice de directorio. -
disableDevLogs
booleano opcional
El valor predeterminado es false.
-
dontCacheBustURLsMatching
RegExp opcional
Se supondrá que los recursos que coincidan con esto tienen una versión única a través de su URL y están exentos de la eliminación normal de la caché HTTP que se realiza cuando se completa la caché previa. Si bien no es obligatorio, se recomienda que, si tu proceso de compilación existente ya inserta un valor
[hash]
en cada nombre de archivo, proporciones una RegExp que lo detecte, ya que reducirá el ancho de banda que se consume durante la precarga. -
excluir
(cadena | RegExp | función)[] opcional
Uno o más especificadores que se usan para excluir activos del manifiesto de almacenamiento en caché previo. Esto se interpreta según las mismas reglas que la opción
exclude
estándar dewebpack
. Si no se proporciona, el valor predeterminado es[/\.map$/, /^manifest.*\.js$]
. -
excludeChunks
string[] opcional
Uno o más nombres de fragmentos cuyos archivos de salida correspondientes se deben excluir del manifiesto de almacenamiento en caché.
-
ignoreURLParametersMatching
RegExp[] opcional
Se quitarán todos los nombres de parámetros de búsqueda que coincidan con uno de los RegExp de este array antes de buscar una coincidencia de almacenamiento en caché previo. Esto es útil si tus usuarios pueden solicitar URLs que contengan, por ejemplo, parámetros de URL que se usan para hacer un seguimiento de la fuente del tráfico. Si no se proporciona, el valor predeterminado es
[/^utm_/, /^fbclid$/]
. -
importScripts
string[] opcional
Es una lista de archivos JavaScript que se deben pasar a
importScripts()
dentro del archivo del service worker generado. Esto es útil cuando deseas permitir que Workbox cree tu archivo de service worker de nivel superior, pero deseas incluir algún código adicional, como un objeto de escucha de eventos push. -
importScriptsViaChunks
string[] opcional
Uno o más nombres de fragmentos de Webpack. El contenido de esos fragmentos se incluirá en el service worker generado a través de una llamada a
importScripts()
. -
incluye
(cadena | RegExp | función)[] opcional
Uno o más especificadores que se usan para incluir recursos en el manifiesto de almacenamiento en caché previo. Esto se interpreta según las mismas reglas que la opción
include
estándar dewebpack
. -
inlineWorkboxRuntime
booleano opcional
El valor predeterminado es false.
Indica si el código del entorno de ejecución para la biblioteca de Workbox debe incluirse en el service worker de nivel superior o dividirse en un archivo separado que debe implementarse junto con el service worker. Mantener el entorno de ejecución separado significa que los usuarios no tendrán que volver a descargar el código de Workbox cada vez que cambie tu service worker de nivel superior.
-
manifestEntries
ManifestEntry[] opcional
-
manifestTransforms
ManifestTransform[] opcional
Una o más funciones que se aplicarán de forma secuencial en el manifiesto generado. Si también se especifican
modifyURLPrefix
odontCacheBustURLsMatching
, las transformaciones correspondientes se aplicarán primero. -
maximumFileSizeToCacheInBytes
número opcional
El valor predeterminado es: 2097152
Este valor se puede usar para determinar el tamaño máximo de los archivos que se almacenarán en la caché previamente. Esto evita que almacenes en caché de forma previa, por error, archivos muy grandes que podrían haber coincidido accidentalmente con uno de tus patrones.
-
Standard
cadena opcional
Si se establece en "producción", se producirá un paquete de trabajador de servicio optimizado que excluye la información de depuración. Si no se configura de forma explícita aquí, se usará el valor
mode
configurado en la compilaciónwebpack
actual. -
modifyURLPrefix
objeto opcional
Un objeto de asignación de prefijos de string para reemplazar valores de string. Esto se puede usar, por ejemplo, para quitar o agregar un prefijo de ruta de acceso de una entrada de manifiesto si la configuración de tu hosting web no coincide con la configuración de tu sistema de archivos local. Como alternativa con más flexibilidad, puedes usar la opción
manifestTransforms
y proporcionar una función que modifique las entradas del manifiesto con cualquier lógica que proporciones.Ejemplo de uso:
// Replace a '/dist/' prefix with '/', and also prepend // '/static' to every URL. modifyURLPrefix: { '/dist/': '/', '': '/static', }
-
cadena opcional
El valor predeterminado es null.
Si se especifica, todas las solicitudes de navegación para las URLs que no se almacenaron en caché previamente se completarán con el HTML de la URL proporcionada. Debes pasar la URL de un documento HTML que aparezca en el manifiesto de almacenamiento previo en caché. Se diseñó para usarse en una app de una sola página, en la que deseas que todas las navegaciones usen un código HTML de Shell de la app común.
-
RegExp[] opcional
Es un array opcional de expresiones regulares que restringe a qué URLs se aplica el comportamiento
navigateFallback
configurado. Esto es útil si solo un subconjunto de las URLs de tu sitio debe considerarse parte de una app de una sola página. Si se configurannavigateFallbackDenylist
ynavigateFallbackAllowlist
, la lista de entidades rechazadas tiene prioridad.Nota: Estas RegExps se pueden evaluar en función de cada URL de destino durante una navegación. Evita usar RegExps complejas, de lo contrario, es posible que los usuarios vean demoras cuando naveguen por tu sitio.
-
RegExp[] opcional
Es un array opcional de expresiones regulares que restringe las URLs a las que se aplica el comportamiento de
navigateFallback
configurado. Esto es útil si solo un subconjunto de las URLs de tu sitio debe considerarse parte de una app de una sola página. Si se configurannavigateFallbackDenylist
ynavigateFallbackAllowlist
, la lista de entidades rechazadas tiene prioridad.Nota: Estos RegExps pueden evaluarse en comparación con cada URL de destino durante una navegación. Evita usar RegExps complejos. De lo contrario, es posible que los usuarios experimenten demoras cuando naveguen por tu sitio.
-
booleano opcional
El valor predeterminado es false.
Indica si se debe habilitar o no la carga previa de navegación en el service worker generado. Cuando se establece como verdadero, también debes usar
runtimeCaching
para configurar una estrategia de respuesta adecuada que coincida con las solicitudes de navegación y usar la respuesta precargada. -
offlineGoogleAnalytics
booleano | GoogleAnalyticsInitializeOptions opcional
El valor predeterminado es false.
Controla si se debe incluir o no la compatibilidad con Google Analytics sin conexión. Cuando sea
true
, la llamada ainitialize()
deworkbox-google-analytics
se agregará a tu trabajador de servicio generado. Cuando se establece enObject
, ese objeto se pasa a la llamadainitialize()
, lo que te permite personalizar el comportamiento. -
runtimeCaching
RuntimeCaching[] opcional
Cuando usas las herramientas de compilación de Workbox para generar tu trabajador del servicio, puedes especificar uno o más parámetros de configuración de almacenamiento en caché del entorno de ejecución. Luego, se traducen a llamadas
workbox-routing.registerRoute
con la configuración de coincidencia y controlador que definas.Para ver todas las opciones, consulta la documentación de
workbox-build.RuntimeCaching
. En el siguiente ejemplo, se muestra una configuración típica, con dos rutas de entorno de ejecución definidas: -
skipWaiting
booleano opcional
El valor predeterminado es false.
Indica si se debe agregar una llamada incondicional a
skipWaiting()
al trabajador de servicio generado. Si esfalse
, se agregará un objeto de escuchamessage
, lo que permitirá que las páginas del cliente activenskipWaiting()
llamando apostMessage({type: 'SKIP_WAITING'})
en un service worker en espera. -
sourcemap
booleano opcional
El valor predeterminado es true.
Indica si se debe crear un mapa de origen para los archivos de service worker generados.
-
swDest
cadena opcional
El valor predeterminado es: "service-worker.js"
Es el nombre del activo del archivo del servicio trabajador que crea este complemento.
InjectManifest
Esta clase admite la compilación de un archivo de trabajador de servicio proporcionado a través de swSrc
y la inserción en ese trabajador de servicio de una lista de URLs y de información de revisión para el almacenamiento en caché previo según la canalización de recursos de Webpack.
Usa una instancia de InjectManifest
en el array plugins
de una configuración de webpack.
Además de insertar el manifiesto, este complemento realizará una compilación del archivo swSrc
con las opciones de la configuración principal de Webpack.
// 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: '...',
});
Propiedades
-
constructor
void
Crea una instancia de InjectManifest.
La función
constructor
se ve de la siguiente manera:(config: WebpackInjectManifestOptions) => {...}
-
config
-
muestra
-
-
config
Propiedades
default
Tipo
objeto
Propiedades
-
GenerateSW
consulta
-
InjectManifest
consulta