Angular 5 应用程序没有注册服务工作者

6
我有一个已经构建好且SW正常工作的应用程序。我在继续开发时没有关注SW,现在在应用程序充电时不再下载SW(就好像应用程序没有注册SW一样)。
我非常绝望,因为我不知道如何调试/找到这个问题的线索。 我该如何跟踪SW注册过程?
更多上下文:
- 在.angular-cli.json中具有 "serviceWorker": true - 在app.module.ts中使用ServiceWorkerModule.register('/ngsw-worker.js', { enabled: environment.production }) - 使用http-server构建我的应用程序并以生产模式进行服务(ngsw.json和ngsw-worker.js都是可访问的) - 在开发模式下清除缓存(常规缓存和应用程序 /清除存储)
我尝试过:
- 改变app.module导入顺序 - 验证环境是否为生产模式 - 从头开始生成其他空应用程序,并执行相同的过程
如果我没有忘记什么,我还能检查些什么? 如果不行,我的最后两个解决方案是:
- 将模块移动到空应用程序中以解决问题,而无需理解错误 - 点燃火焰 + 萨满歌

这个线程中有一些可能的解决方案:https://github.com/angular/angular-cli/issues/8779 - kikar
我没有找到干净的解决方案来解决我的问题,正如@kikar提供的链接所说,这可能是我的某个依赖项导致的。不过,这个解决方法对我很有用,我必须这样做: if ('serviceWorker' in navigator && environment.production) navigator.serviceWorker.register('/ngsw-worker.js'); - Alexandre SIRKO
2个回答

6

看起来问题是由 angularFire2 引起的。我曾经遇到过同样的问题,但通过在我的 main.ts 文件中添加以下代码解决了它。

if ('serviceWorker' in navigator && environment.production) {
  navigator.serviceWorker.register('/ngsw-worker.js');
}

1
我没有使用angularFire2,但它确实与我的某些依赖项相关。我不得不使用相同的解决方法。 - Alexandre SIRKO
我遇到了这个问题。我正在使用angularfire2,而这个答案是正确的。 - George Knap
我也没有使用angularFire2,但这个方法同样解决了我的问题。 - Dave Bauman
1
哇,非常感谢你。我确实使用angularFire2,这个方法很有效。但是我必须将它放在platformBrowserDynamic().bootstrapModule(AppModule).catch(err => console.log(err));下面才能使其正常工作。不确定我是否能够自己找到这个问题的解决方法...你真的帮我节省了很多时间! - JCisar
好吧,我没有使用angularFire2,但这让我成功了......有点,仍然有一些错误。 - Kenmore

1
我不得不将我的基础网址更改为index.html,否则服务工作者无法按设计工作:

index.html:

<base href="index.html">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接