Angular Service Worker периодически обслуживает старую версию приложения - PullRequest
1 голос
/ 11 июня 2019

У меня есть приложение Angular (версия 7.2.2), использующее Angular Service Worker (версия 7.2.12).

Сервисный работник периодически обслуживает старую версию приложения. При обновлении отображается новая версия, но если пользователь закрывает и снова открывает вкладку браузера, он возвращается к старой версии до перезагрузки следующей страницы. Страница "/ ngsw / state" также не содержит ошибок при отображении старой версии.

Мне не удалось последовательно воспроизвести проблему. Частично потому, что я не уверен в причине. Я часто провел недели без того, чтобы работник службы обслуживал старую версию кода.


Некоторые из потенциальных решений, которые я попробовал и которые выглядели многообещающими, включают:

  • Обновление угловой и сервисного работника до последних версий (на тот момент).
  • Удаление кэширования из ngsw-config.json для предотвращения несоответствия хэшей.
  • Добавление проверок обновлений в нескольких местах кода.
  • Проверка обновлений на интервале.
  • Принудительная перезагрузка, когда доступно обновление - иногда это происходит, но иногда для получения новой версии требуется ручная перезагрузка.

1 Ответ

0 голосов
/ 11 июня 2019

Вы можете проверить детали здесь.Короче говоря, имейте в виду, что отмена регистрации работника службы выполняется медленно и выполняется в фоновом режиме.Для быстрого прохождения туда и обратно на этапе разработки вам может потребоваться отменить регистрацию и перезагрузить ее вручную.

Проверьте информацию по следующему адресу: https://love2dev.com/blog/how-to-uninstall-a-service-worker/

Оригинальный GIST указывает, что мы должныочистите нашего сервисного работника перед запуском:

self.addEventListener ("активировать", функция (e) {

self.registration.unregister()
  .then(function() {

    return self.clients.matchAll();

  })
  .then(function(clients) {

    clients.forEach(client => client.navigate(client.url));

  });

});

Однако пост предлагаетиспользуя эту расширенную версию:

  self.addEventListener("activate", function(e) {

    self.registration.unregister()
      .then(function() {

        return self.clients.matchAll();

      })
      .then(function(clients) {

        clients.forEach(client => {

          if (client.url && "navigate" in client){

            client.navigate(client.url))

      }

  });

});

Я бы также позаботился о том, чтобы:

  • Убедитесь, что сборка разработки не пробирается в цикле сборки, я видел это там, где думают разработчикичто-то построено в режиме PROD и не является
  • Убедитесь, что вы используете HTTPS, используйте NGROK локально.Это кажется обязательным условием для правильной работы PWA / SW.
  • Убедитесь, что изменяющиеся файлы получают другой хэш-номер, я видел случаи, когда они не переименовывались, и поэтому вы получаете старый код.
  • Включите способ объединения номера версии, пока вы не будете довольны операцией.

Я надеюсь, что некоторые из этих советов помогут вам двигаться в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...