angular-cli更新未定义错误的service-worker id

时间:2018-05-03 18:14:33

标签: angular angular-cli service-worker progressive-web-apps

我已经遵循了角度的官方指南并成功安装了初始服务工作人员。接下来我想尝试更新行为并得到一个

  

TypeError:无法读取属性' id'未定义的

其中id引用ngsw-worker.js

中方法中的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);
....
}

我所做的步骤是

  1. 注册SW,离线并重新加载(工作),关闭标签但保持窗口打开
  2. 更新了app.cmp.html中的代码
  3. 重建项目(ng build --prod)
  4. 打开新标签和应用程序(可以观察软件更新)
  5. 重新加载应用
  6. 错误
  7. 我使用的是angular-cli 1.7.4,包括服务工作者在内的所有角度库都在5.2.10上。

    修改1 08.05.2018

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

    编辑2 08.05.2018

    到目前为止我能找到的东西:

    ng build --prod不会创建新版本的ngsw-worker.js(在重新加载新的构建时,chrome不会显示"等待激活")。当我重新加载或不加之前关闭标签时,会出现错误。

    当我手动向ngsw-worker.js添加内容(如console.log)时,通常生命周期开始,旧的服务工作者正在被" new"一。

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

    此外,尝试使用angular的故障安全(删除或重命名ngsw-config)删除服务工作程序会导致构建错误。

      

    预计在/ Users / hanche / Desktop / Development / playground / toggl2文件夹中找到一个ngsw-config.json配置文件。在angular.json配置文件中提供一个或禁用Service Worker。

    编辑3& '解决方案' 09.05.2018

    如果接受2018年5月1日的Pull Request,这个问题应该得到解决。

    同时,您可以通过从dist /文件夹中删除ngsw.json而不是ngsw-config.json来自动取消注册serviceworker,如故障安全部分所述。请参阅reply I got here

    此外,它也可能是chrome bug

2 个答案:

答案 0 :(得分:2)

在我们的案例中,问题在升级到角度6.0.0后得到了解决。如果您的项目可能,那么您应该尝试一下。

我查看了ngsw-worker.js,它在6.0.0中发生了相当大的变化,而在(在我们的例子中)是5.2.0。

答案 1 :(得分:1)

我们可以通过将service.worker 5.2.10降级到5.2.0 "@angular/service-worker": "5.2.0",

来解决此错误

<强>更新

第二次部署后,我们遇到了同样的错误。现在我们已经注销了chrome(chrome:// serviceworker-internals /)中的所有服务工作者,现在它似乎也适用于5.2.10版本。不知道问题所在。