Creé un trabajador de servicio, lo depuré con Chrome en local y funcionó bien. Lo implementé en un sitio web y veo los errores en la imagen a continuación (solo en Chrome, con Firefox funciona bien):
/static/core.jslib/sw.min.js:1 Failed to load the script unexpectedly /static/core.jslib/sw.min.js:1 Failed to load the script unexpectedlyCon Chrome, si hago clic en iniciar el trabajador del servicio, se detiene de inmediato. Con Firefox se ejecuta un rato antes de detenerse (esperado).
Network o ApplicationHe simplificado mi trabajador de servicio a esto, por lo que ahora estoy bastante seguro de que no es mi código, sino algo que Chrome está haciendo:
/ INSTALL ------- async function install() { console.log("SW: Installing ..."); } async function handleInstall(event) { event.waitUntil(install()); } self.addEventListener("install", handleInstall); // ACTIVATE ------- async function activate() { console.log("SW: Activated"); } async function handleActivate(event) { event.waitUntil(activate()); } self.addEventListener("activate", handleActivate); // FETCH ------- async function swFetch(event) { //console.log('SW: FETCH - RELEASE TIMESTAMP', RELEASE_TIMESTAMP) const response = await fetch(event.request); console.log("SW: FETCHED ", event.request.url); return response } async function handleFetch(event) { return event.respondWith(swFetch(event)); } self.addEventListener("fetch", handleFetch); Nota: Cuando funciona, el archivo sw.min.js aparece debajo de las fuentes (cuando se instala), cierra y abre el navegador nuevamente y luego esto no se muestra: 
PD ejecutándose en Ubuntu 20.04. Tal vez tenga que ver con dónde almacena los trabajadores del servicio en Linux.
Incluso agregué una llamada de búsqueda para obtener el archivo e imprimirlo justo antes de que registre el trabajo del servicio para verificar que pueda acceder al archivo, y siempre está bien:
Fetched /static/core.jslib/sw.min.js Responsebody: (...)bodyUsed: falseheaders: Headers {}ok: trueredirected: falsestatus: 200statusText: ""type: "basic"url: "https://www.demo..../static/core.jslib/sw.min.js"[[Prototype]]: Response swregister.min.50eb376e2ddc.js:1 SW: Registered - At scope https://www.demo..../ /static/core.jslib/sw.min.js:1 Failed to load the script unexpectedly /static/core.jslib/sw.min.js:1 Failed to load the script unexpectedlyLo extraño es que el error aparece cuando uno hace clic para navegar a otro lugar. El siguiente registro de la consola se generó de la siguiente manera:
Así que no creo que sea un problema de recuperación, creo que es el almacenamiento interno del archivo del trabajador del servicio, al que Chrome no puede acceder.
chrome://serviceworker-internals/` shows the service worker: Scope: https://www.demo..../ Registration ID: 287 Navigation preload enabled: false Navigation preload header length: 4 Active worker: Installation Status: ACTIVATED Running Status: STOPPED Fetch handler existence: EXISTS Script: https://www.demo..../static/core.jslib/sw.min.js Version ID: 649 Renderer process ID: 0 Renderer thread ID: -1 DevTools agent route ID: -2 Log: Y si hago clic en start , muestra:
Console: {"lineNumber":0,"message":"Failed to load the script unexpectedly", "message_level":3,"sourceIdentifier":1,"sourceURL":"https://www.demo.../static/core.jslib/sw.min.js"}Mientras que los trabajadores de servicios de otras personas comienzan y funcionan por un tiempo.
Aquí están los encabezados de respuesta para sw.min.js
# Here are the response headers for: date: Tue, 25 Jan 2022 18:15:44 GMT etag: "61f03d46-350" last-modified: Tue, 25 Jan 2022 18:11:18 GMT server: notepad.exe service-worker-allowed: / { "name": "Cube", "short_name": "Cube", "icons": [ { "src": "/static/core.pwa/img/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png", "purpose": "any" }, { "src": "/static/core.pwa/img/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png", "purpose": "any" }, { "src": "/static/core.pwa/img/maskable_icon.png", "sizes": "1024x1024", "type": "image/png", "purpose": "maskable" } ], "theme_color": "#212121", "background_color": "#ffffff", "display": "standalone", "start_url": "/" }La gente de Chromium descubrió que era el encabezado del tipo de contenido MIME: https://bugs.chromium.org/p/chromium/issues/detail?id=1292379#c17
En nginx cambié el encabezado de:
content-type: application/javascript; charset=utf-8para
content-type: application/javascript¡Ahora funciona!
Al registrar el trabajador del servicio, configuré el tipo como módulo. Aparentemente significa "bloqueo cuando se reinicia" en Chrome.
const options = { scope: "/", // type: "module", <-- needed to comment this out }; const result = await navigator.serviceWorker.register(swPath, options);Aparentemente, Chrome no parece admitir trabajadores de servicio de tipo de módulo, cuando revisé la tabla de soporte, parecía haber un buen soporte.