【问题标题】:angular-cli update service-worker id of undefined errorangular-cli 更新未定义错误的 service-worker id
【发布时间】:2018-10-14 03:32:46
【问题描述】:

我已经按照 angular 的官方指南成功安装了初始的 service worker。接下来我想尝试更新行为并得到一个

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. 注册软件,离线并重新加载(工作),关闭标签但保持窗口打开
  2. 更新了 app.cmp.html 中的代码
  3. 重建项目(ng build --prod)
  4. 打开了新标签和应用(可以观察软件更新)
  5. 重新加载应用程序
  6. 错误

我正在使用 angular-cli 1.7.4,包括 service-worker 在内的所有 angular 库都在 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)添加一些东西时,通常的生命周期就会开始,旧的 service worker 将被“新”的替换。

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

此外,尝试使用 Angular 的故障安全(删除或重命名 ngsw-config)删除 service-worker 会导致构建错误。

预计会在 /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

【问题讨论】:

  • 不管使用什么编程语言,如果'client'对象是有效对象,你是否尝试过调试?
  • @noogui - 那应该怎么做。这里有代码参考吗?我也需要这个帮助。
  • 您找到解决此问题的方法了吗??

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


【解决方案1】:

我们可以通过将 service.worker 5.2.10 降级到 5.2.0 "@angular/service-worker": "5.2.0",来解决这个错误

更新

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

【讨论】:

  • 会试试这个,谢谢。当然,最大的问题是谁来处理已经投入生产的应用程序......
  • 请看我更新的答案。也许以编程方式取消注册服务工作者可能会很好?
  • 主要问题是如何从使用过您的应用程序的“客户”的已“感染”设备中删除它们。但请参阅我的编辑 3。
  • 从 chrome://serviceworker-internals/ 取消注册服务工作者可以解决问题
【解决方案2】:

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

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

【讨论】:

  • 您好 csim,您在更新产品构建之前是否遇到过相同的未定义错误 ID?
  • 我不太确定我是否正确理解了你的问题,但如果你问我们是否有同样的错误,那么是的。
猜你喜欢
  • 2019-02-09
  • 1970-01-01
  • 2020-06-20
  • 2020-02-06
  • 2018-03-04
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多