10

使用 Angular 5.1.2 Angular-cli 1.6.3

所有文件都很普通。dist 文件夹已创建

我的 ngsw-config.json

{
"index": "/index.html",
"assetGroups": [
    {
        "name": "app",
        "installMode": "prefetch",
        "resources": {
            "files": [
                "/favicon.ico",
                "/index.html"
            ],
            "versionedFiles": [
                "/*.bundle.css",
                "/*.bundle.js",
                "/*.chunk.js"
            ]
        }
    },
    {
        "name": "assets",
        "installMode": "lazy",
        "updateMode": "prefetch",
        "resources": {
            "files": [
                "/assets/**"
            ]
        }
    }]   

}

我的 app.module.ts 使用

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

我正在使用香草 environment.ts 和 environment.prod.ts

主要的.ts

import './polyfills.ts';
import {enableProdMode} from '@angular/core';
import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';

import {AppModule} from './app/app.module';
import {environment} from './environments/environment';

if (environment.production) {
enableProdMode();
}

platformBrowserDynamic().bootstrapModule(AppModule)
.then(() => {
if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('ngsw-worker.js');
}

})
.catch(err => console.log(err));

不知道还有什么要检查的

4

4 回答 4

22

您是否将serviceWorker属性添加到apps第一个条目.angular-cli.json?如果没有,angular-cli 不会构建它。

"apps": [
  {
    ...
    "serviceWorker": true
  }
}

编辑截至 2018 年 12 月, .angular-cli.json现在是angular.json,而 serviceWorker 的格式现在是:

{
    ...
    "projects": {
         "my-project-name": {
             "architect": {
                 "build": {
                     "configurations": {
                        "production": {
                           "serviceWorker": true
                        }
                     }
                 }
             }
         }
    }

您需要为需要服务工作者的每个配置指定 serviceWorker: true 。

于 2018-01-06T14:12:09.657 回答
11

我有同样的问题。原来我用的是旧包

"@angular-devkit/build-angular": "~0.6.6"

这应该是

"@angular-devkit/build-angular": "~0.10.0",

在此之后,服务工作者被复制

还要确保使用最新的 Angular 7 和最新的 Angular CLI

于 2018-10-22T22:34:14.580 回答
5

经过长时间的搜索,我们发现我们的构建中缺少 --prod 标志会导致问题。正是这个生成了 service-worker 文件,并且没有额外的构建标志能够做到这一点(与 uglifying 相同,而 uglifyer 是我们之前将 --build 标志与 --env=build 交换的原因)。更多关于 --build 标志的信息可以在这里找到:Angular 2 with CLI - build for production

于 2018-05-18T08:33:02.630 回答
-3

看来我的 app.module.ts 缺少空格

我有: environment.production ?ServiceWorkerModule.register('/ngsw-worker.js') :[]

更改为: environment.production ?ServiceWorkerModule.register('/ngsw-worker.js') : []

于 2018-01-09T16:16:02.143 回答