我遵循了angular的官方指南,并成功安装了初始服务人员。接下来,我想试用一下更新行为,并得到一个



其中,在ngsw-worker.js中的方法中,id是指client.id

async updateClient(client) {
        // Figure out which version the client is on. If it's not on the latest,
        // it needs to be moved.
        const existing = this.clientVersionMap.get(client.id);
....
}

我做的步骤是
  • 注册软件,脱机并重新加载(工作),关闭选项卡,但保持窗口打开
  • 更新了app.cmp.html
  • 中的代码
  • 重建项目(ng build --prod)
  • 打开了新标签页,并且该应用程序(可以观察到软件更新)
  • 重新加载应用程序
  • 错误

  • 我正在使用angular-cli 1.7.4,所有的 Angular 库(包括service-worker)都在5.2.10上。

    编辑1 08.05.2018

    在github上的angular-cli 6上发布了一个问题
    https://github.com/angular/angular/issues/23742

    编辑2 08.05.2018

    到目前为止,我能找到的是:

    ng build --prod不会创建ngsw-worker.js的新版本(重新加载新的新鲜版本时,chrome不会显示“等待激活”)。无论是否关闭选项卡,我重新加载时,都会出现错误。

    当我手动将某些内容添加到ngsw-worker.js(例如console.log)时,通常的生命周期就会开始,旧的服务 worker 正在被"new"的 worker 代替。

    当我在完成激活之前重新加载时,会出现相同的错误。否则它会起作用...

    此外,尝试使用angular的Fail-safe删除服务 worker (删除或重命名ngsw-config)会导致生成错误。



    编辑3和'Solution' 09.05.2018

    如果从2018年5月1日开始接受此Pull Request,应该可以解决此问题。

    同时,您可以通过从dist/文件夹中删除ngsw.json和NOT ngsw-config.json来自动注销服务工作人员,如故障安全部分所述。参见reply I got here

    此外,它也可以是chrome bug

    最佳答案

    在我们的情况下,升级到 Angular 为6.0.0后,此问题已解决。如果您的项目可行,则应尝试一下。

    我查看了ngsw-worker.js,与(在我们的示例中)5.2.0相比,它在6.0.0中发生了很大变化。

    关于angular-cli更新服务 worker 编号(未定义错误),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50161482/

    10-13 04:17