【问题标题】:Angular 5 Service Worker not workingAngular 5 Service Worker 不工作
【发布时间】:2018-07-21 05:59:18
【问题描述】:

我尝试在更新到 Angular 5 后将 service worker 添加到我的项目中,但遇到了一些问题。我将导入添加到 app.module.ts:

import {ServiceWorkerModule} from '@angular/service-worker';
import {environment} from '../environments/environment';
...
environment.production ? ServiceWorkerModule.register('/ngsw-worker.js') : [],

执行$ ng set apps.0.serviceWorker=true 以允许项目中的服务人员

生成配置:

{
  "index": "/index.html",
  "assetGroups": [
    {
      "name": "app",
      "installMode": "prefetch",
      "resources": {
        "files": [
          "/index.html"
        ],
        "versionedFiles": [
          "/*.bundle.css",
          "/*.bundle.js",
          "/*.chunk.js"
        ]
      }
    },
    {
      "name": "assets",
      "installMode": "lazy",
      "updateMode": "prefetch",
      "resources": {
        "files": [
          "/assets/**"
        ]
      }
    }
  ],
  "dataGroups": [
    {
      "name": "api-performance",
      "urls": [
        "/",
        "/main",
        "/login",
        "/select-content"
      ],
      "cacheConfig": {
        "strategy": "performance",
        "maxSize": 100,
        "maxAge": "3d"
      }
    }
  ]
}

和清单:

{
  "name": "App",
  "short_name": "App",
  "start_url": "/login",
  "theme_color": "#00a2e8",
  "background_color": "#00a2e8",
  "display": "standalone",
 "icons": [
  {
   "src": "assets\/icons\/android-icon-36x36.png",
   "sizes": "36x36",
   "type": "image\/png",
   "density": "0.75"
  },
  {
   "src": "assets\/icons\/android-icon-48x48.png",
   "sizes": "48x48",
   "type": "image\/png",
   "density": "1.0"
  },
  {
   "src": "assets\/icons\/android-icon-72x72.png",
   "sizes": "72x72",
   "type": "image\/png",
   "density": "1.5"
  },
  {
   "src": "assets\/icons\/android-icon-96x96.png",
   "sizes": "96x96",
   "type": "image\/png",
   "density": "2.0"
  },
  {
   "src": "assets\/icons\/android-icon-144x144.png",
   "sizes": "144x144",
   "type": "image\/png",
   "density": "3.0"
  },
  {
   "src": "assets\/icons\/android-icon-192x192.png",
   "sizes": "192x192",
   "type": "image\/png",
   "density": "4.0"
  }
 ]
}

然后在生产环境中构建它:

ng build --prod --aot=false --build-optimizer=false

Http-server 以 SSL 模式运行,但 chrome dev-tools 中的 service worker 的 lsit 是清楚的。怎么了?可能是这个标志破坏了它--aot=false --build-optimizer=false?

【问题讨论】:

标签: angular5 service-worker angular-service-worker


【解决方案1】:

在同时导入 AngularFire2 的模块中注册服务工作者似乎是一个问题。我找到了如何在 main.ts 中注册 SW 的解决方案,这是可行的:

platformBrowserDynamic().bootstrapModule(AppModule).then(() => {
  if ('serviceWorker' in navigator && environment.production) {
    navigator.serviceWorker.register('ngsw-worker.js');
  }
}).catch(err => console.log(err));

【讨论】:

  • 非常感谢!我为此苦苦挣扎了几次!
  • 我没有使用 AngularFire2,但我遇到了同样的问题,这就是解决方案。
  • 它也对我有用..虽然我找不到哪个包在注册服务人员时造成问题。
  • 我不使用 AngularFire2,但这也解决了我的问题。找出导致问题的软件包似乎是一项艰巨的任务......谢谢!
  • 实际上,在我的代码中,当我在本地运行服务工作者时,它正在我的机器上运行。但是,如果我在另一台具有相同网络访问权限的机器上运行它,它就不会在远程机器上运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 2018-11-25
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 2018-06-04
相关资源
最近更新 更多