Угловой PWA не обновляет - PullRequest
0 голосов
/ 30 июня 2019

У меня проблема с моим угловым приложением 6, использующим Service Workers.

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

Вот мой app.component.ts

import { Component } from '@angular/core';
import { DataService } from 'src/services/data.service';
import { SwUpdate } from '@angular/service-worker';
declare var M: any;
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {

  title = 'MyApp';

  public modalUpdate:any;

  constructor(public dataService: DataService, public updates:SwUpdate) {
    updates.available.subscribe(event => {
      console.log('current version is', event.current);
      console.log('available version is', event.available);
      localStorage.setItem("version",event.current.appData["version"]);
      localStorage.setItem("versionHash",event.current.hash);
      updates.activateUpdate().then(() => this.modalUpdate.open());
    });
    updates.activated.subscribe(event => {
      localStorage.setItem("activatedVersion",event.previous.appData["version"]);
      localStorage.setItem("activatedVersionHash",event.previous.hash);
      console.log('old version was', event.previous);
      console.log('new version is', event.current);
    });
   }

   updateApp(){
    window.location.reload();
    console.log("se está actualizando");

   }

  ngOnInit() {
    this.modalUpdate = new M.Modal(document.querySelector('#modalUpdate'));
  }

}

Но похоже, что никогда не запускается метод updateApp. когда я вижу информацию об отладке NGSW, обращаясь к / ngsw / status, я вижу это:

NGSW Debug Info:

Driver state: NORMAL ((nominal))
Latest manifest hash: none
Last update check: never



=== Idle Task Queue ===
Last update tick: never
Last update run: never
Task queue:


Debug log:

То есть говорится, что никогда не обновлялся и не проверял наличие обновлений (как я читал)

Вот мой ngsw-config.json

{
  "index": "/index.html",
  "assetGroups": [
    {
      "name": "MyApp",
      "installMode": "prefetch",
      "updateMode": "prefetch",
      "resources": {
        "files": [
          "/*.html",
          "/*.css",
          "/*.js",
          "/assets/fonts/**"
        ]
      }
    },
    {
      "name": "games",
      "installMode": "prefetch",
      "updateMode": "prefetch",
      "resources": {
        "files": [
          "/assets/games/fk/**"
        ]
      }
    },
    {
      "name": "assets",
      "installMode": "lazy",
      "updateMode": "prefetch",
      "resources": {
        "files": [
          "/assets/**"
        ],
        "urls": [
          "https://f001.backblazeb2.com/file/**",
          "https://picsum.photos/**"
        ]
      }
    }
  ]
}

Элемент #modalUpdate является модальным с кнопкой, которая вызывает функцию updateApp, и она никогда не работает (кажется, что update.available и updates.acactive никогда не срабатывают).

Также бывает, что когда пользователь открывает страницу из Chrome напрямую и обновляет ее, страница обновляется, но мне нужно, чтобы приложение обновлялось само из себя, не открывая браузер, а иногда даже из браузера, даже когда он загружен новая версия, она возвращается к предыдущей.

Он должен обновляться автоматически при каждой загрузке приложения, поэтому я не знаю, почему кэш никогда не обновляется.

Я почти отчаялся по этому поводу. Что мне делать или что я делаю не так?

Большое вам спасибо.

...