Я делаю крошечное автономное веб-приложение / PWA.Он предназначен для того, чтобы открываться с иконки на главном экране и имитировать обычное приложение, полностью загружаясь из кеша в автономном режиме.
Приложение написано с использованием Vue, и для выполнения вышесказанного я просто использую их шаблон PWA ивсе, что он генерирует.Насколько мне известно, для этого устанавливается workbox с использованием плагина GenerateSW для предварительного кэширования всего в сборке Webpack и регистрации его с использованием register-service-worker .То есть из коробки у меня довольно мало контроля над мелкими деталями, это должно быть готовое решение.
Тем не менее, я не уверен, как на самом деле загрузить новую сборку приложения, когдаэто доступно.Вышесказанное может обнаружить это - сгенерированный файл регистрации SW с моими изменениями выглядит следующим образом:
import debug from 'debug';
import { register } from 'register-service-worker';
if (process.env.NODE_ENV === 'production') {
register(`${process.env.BASE_URL}service-worker.js`, {
ready(...args) {
log('App is being served from cache by a service worker.\n', ...args);
},
cached(...args) {
log('Content has been cached for offline use.', ...args);
},
updated(...args) {
log('New content is available; please refresh.', ...args);
},
offline(...args) {
log('No internet connection found. App is running in offline mode.', ...args);
},
error(error, ...args) {
log('Error during service worker registration:', error, ...args);
}
});
}
Когда я делаю новую сборку приложения и обновляю приложение в браузере, updated()
обратный вызов выполняется, но больше ничего не делается.Когда я попытался добавить:
window.location.reload(true);
, что должно быть принудительным обновлением, я просто получил цикл обновления.Я предполагаю, что это связано с тем, что кэш рабочего сервиса полностью независим от кэша браузера и не подвержен влиянию таких вещей, как описанные выше или Ctrl + F5 .(Что делает «пожалуйста, обновите» довольно вводящим в заблуждение.)
Поскольку это будет имитировать нативное приложение, а оно должно быть простым инструментом для ведения бизнеса, мне не нужно делатьничего более сложного, чем немедленная перезагрузка в новую версию приложения, когда доступно обновление.Как мне этого добиться?