В моем поиске ответа. Я отказался от использования parcel-plugin-sw-precache и вместо этого переключился на использование workbox Если вы заинтересованы в создании автономного приложения с Parcel.js. Тогда я рекомендую Workbox, поскольку это следующее поколение sw-precache.
Вот как у меня это работает:
Обучение
Узнайте, что такое Workbox и что делает с этой кодовой лабораторией.
Implimenting
1) Установить CLI Workbox глобально.
2) создать работника службы размещения в корневом каталоге. например sw_shell.js
- Оболочка является удерживающим файлом. Мастер Workbox подберет его и сгенерирует
новый файл sw.js автоматически.
3) Добавьте в файл sw_config.js следующий код:
importScripts("https://storage.googleapis.com/workbox-cdn/releases/3.6.3/workbox-sw.js");
if (workbox) {
workbox.skipWaiting();
workbox.clientsClaim();
workbox.precaching.suppressWarnings();
// The next line came from the code lab
workbox.precaching.precacheAndRoute([]);
workbox.routing.registerNavigationRoute("/index.html");
} else {
console.log(`Boo! Workbox didn't load ?`);
}
4) Запустите этот код из командной строки, открытой в корневом каталоге вашего проекта.
workbox wizard --injectManifest
5) Следуйте инструкциям мастера. В целях разработки укажите «корневое веб-приложение» в папке dist. Workbox работает по волшебству и собирает эти файлы для хеширования в новый файл sw.js.
6) Мастер запросит ваш существующий файл sw.js. В моем случае я использую sw_shell.js.
a: рабочая коробка забирает файл sw_shell.js.
c: Создает как новый файл sw.js в месте, указанном при запуске мастера, и вводит файлы для запуска в автономном режиме.
В моем случае я разрешил генерации нового sw.js в моей корневой папке, потому что Parcel подхватывает его автоматически в соответствии со сценарием в моем index.js.
'use strict';
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('sw.js').then(function(reg) {
console.log('Worker registration started')
reg.onupdatefound = function() {
console.log('update found')
var installingWorker = reg.installing;
installingWorker.onstatechange = function() {
console.log('installing worker')
switch (installingWorker.state) {
case 'installed':
if (navigator.serviceWorker.controller) {
console.log('New or updated content is available.');
} else {
console.log('Content is now available offline!');
}
break;
case 'redundant':
console.error('The installing service worker became redundant.');
break;
}
};
};
}).catch(function(e) {
console.error('Error during service worker registration:', e);
});
});
}
7) Добавьте workbox injectManifest
в ваш package.json, чтобы убедиться, что Workbox регистрирует любые изменения в ваших файлах:
"scripts": {
"start": "parcel index.html workbox injectManifest"
}
Дайте мне знать, если вы хотите узнать больше об этом. Здесь есть видео , которое мне тоже немного помогло.