【发布时间】: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);
....
}
我做的步骤是
- 注册软件,离线并重新加载(工作),关闭标签但保持窗口打开
- 更新了 app.cmp.html 中的代码
- 重建项目(ng build --prod)
- 打开了新标签和应用(可以观察软件更新)
- 重新加载应用程序
- 错误
我正在使用 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