我已经遵循了角度的官方指南并成功安装了初始服务工作人员。接下来我想尝试更新行为并得到一个
TypeError:无法读取属性' id'未定义的
其中id引用ngsw-worker.js
中方法中的client.idasync 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);
....
}
我所做的步骤是
我使用的是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
答案 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版本。不知道问题所在。