服务工作者注册失败:类型错误:无法为范围注册服务工作者

5

我在我的Angular应用程序中注册服务工作者时遇到了问题。 在切换到标准的npm run start脚本之前,一切都正常运行:

"start": "ng serve --aot --port 4200"

使用特定配置进行脚本编写,只需替换我的资源、样式、脚本和环境文件即可。
"start": ng serve --aot --configuration=development --port 4200

我的问题是,ng serve的标准配置是什么,这样我就可以类似地配置我的配置了?或者如果问题在其他地方,我该怎么解决它?如何在开发环境中禁用服务工作者? 在angular json中设置serviceWorker:false无效。 (我仍然会收到错误)

2个回答

5

看起来我找到了解决这个问题的办法。问题出在我的app.module文件中。

应该改为:

imports: [
  ServiceWorkerModule.register('ngsw-worker.js', {
    enabled: environment.production,
  }),
]

我必须使用以下内容:

imports: [
  ServiceWorkerModule.register('ngsw-worker.js'),
],
providers: [
  {
    provide: SwRegistrationOptions,
    useFactory: () => ({ enabled: environment.production }),
  },
]

我认为这个问题与在服务/构建过程中动态更改环境文件有关。能否有人详细解释一下这是什么问题?

3
SwRegistrationOptions 是什么?SwRegistrationOptions 是 Service Worker 注册时所用的选项,它包含有关注册过程的配置信息,例如 Service Worker 脚本文件的位置、范围和运行模式等。 - Omar
@Omar 根据文档“可以用于在 ServiceWorkerModule.register() 之外提供 ServiceWorkerModule 选项的令牌。您可以使用此令牌定义一个提供程序,在运行时生成注册选项”import { SwRegistrationOptions } from '@angular/service-worker'; - Buchi

4

environment.ts中的production改为false,就可以解决问题了。


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