Не удалось настроить сервисного работника в angular js

Я делаю прогрессивное приложение Angular. Я работаю с сервисными работниками и получаю сообщение об ошибке в CLI -

Error: Expected to find an ngsw-config.json configuration file in the /home/nancy/Desktop/beautyOfSoul folder. Either provide one or disable Service Worker in your angular.json configuration file.

Я имею дело с Angular 6. Я знаю, что файл angular.json должен содержать "serviceWorker": true, но я не могу найти ничего подобного в моем файле angular.json, где я могу написать "serviceWorker": true.

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

Мой файл angular.json выглядит следующим образом:

  {
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "newProjectRoot": "projects",
  "projects": {
    "beautyOfSoul": {
      "root": "",
      "sourceRoot": "src",
      "projectType": "application",
      "prefix": "app",

      "schematics": {
        "@schematics/angular:component": {
          "styleext": "scss"
        }
      },
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "dist/beautyOfSoul",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "src/tsconfig.app.json",
            "assets": [
              "src/favicon.ico",
              "src/assets", 
  "src/assets/manifest.json"
            ],


            "styles": [
              "src/styles.scss"
            ],
            "scripts": []
          },
          "configurations": {
            "production": {
              "fileReplacements": [
                {
                  "replace": "src/environments/environment.ts",
                  "with": "src/environments/environment.prod.ts"
                }
              ],
              "optimization": true,
              "outputHashing": "all",
              "sourceMap": false,
              "extractCss": true,
              "namedChunks": false,
              "aot": true,
              "extractLicenses": true,
              "vendorChunk": false,
              "buildOptimizer": true      
           }
          }
        },
        "serve": {
          "builder": "@angular-devkit/build-angular:dev-server",
          "options": {
            "browserTarget": "beautyOfSoul:build"
          },
          "configurations": {
            "production": {
              "browserTarget": "beautyOfSoul:build:production"
            }
          }
        },
        "extract-i18n": {
          "builder": "@angular-devkit/build-angular:extract-i18n",
          "options": {
            "browserTarget": "beautyOfSoul:build"
          }
        },
        "test": {
          "builder": "@angular-devkit/build-angular:karma",
          "options": {
            "main": "src/test.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "src/tsconfig.spec.json",
            "karmaConfig": "src/karma.conf.js",
            "styles": [
              "src/styles.scss"
            ],
            "scripts": [],
            "assets": [
              "src/favicon.ico",
              "src/assets"
            ]
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": [
              "src/tsconfig.app.json",
              "src/tsconfig.spec.json"
            ],
            "exclude": [
              "**/node_modules/**"
            ]
          }
        }
      }
    },
    "beautyOfSoul-e2e": {
      "root": "e2e/",
      "projectType": "application",
      "architect": {
        "e2e": {
          "builder": "@angular-devkit/build-angular:protractor",
          "options": {
            "protractorConfig": "e2e/protractor.conf.js",
            "devServerTarget": "beautyOfSoul:serve"
          },
          "configurations": {
            "production": {
              "devServerTarget": "beautyOfSoul:serve:production"
            }
          }
        },
        "lint": {
          "builder": "@angular-devkit/build-angular:tslint",
          "options": {
            "tsConfig": "e2e/tsconfig.e2e.json",
            "exclude": [
              "**/node_modules/**"
            ]
          }
        }
      }
    }
  },

  "defaultProject": "beautyOfSoul"
}

person N Sharma    schedule 13.06.2018    source источник
comment
Самый простой способ настроить сервис-воркер с Angular — запустить ng add @angular/pwa — он настроит все требования за вас.   -  person Michael Doye    schedule 13.06.2018


Ответы (1)


Вот официальный документ. Вы можете запустить приведенную ниже команду, которая настроит файлы и библиотеки, необходимые для преобразования вашего приложения в PWA.

ng add  @angular/pwa --project *project-name*

Когда вы запускаете эту команду, помимо изменений файла конфигурации и установки библиотек,

1) он добавит manifest.json прямо в папку "src" (не в активы), и лучше оставить его по умолчанию, хотя вы можете попытаться сопоставить его оттуда.

2) он добавит ngsw-config.json в корень проекта (родительский каталог src). Это должно быть в этом месте, начиная с Angular 6 (в 5, я думаю, это было в src, которое было изменено на корневую папку в 6). Этот файл не был найден в вашем случае, что вызывает проблему. Либо переместите существующий сюда, либо удалите существующий и позвольте вышеприведенному создать его для вас (что лучше).

person Anand    schedule 14.06.2018
comment
Спасибо, Ананд, за ваш ответ, но я уже преобразовал свой проект в приложение PWA с помощью указанной выше команды, и у меня есть все файлы, включая ngsw-config.json, в корне проекта. Я думаю, вы рассказываете о том, как преобразовать приложение Angular в приложение PWA, но мой вопрос совершенно другой. Я интегрирую Firebase и его службы в свое приложение, и я получаю сообщение об ошибке, а не для работника службы PWA. - person N Sharma; 14.06.2018
comment
Спасибо, Ананд, за ваш ответ, но я уже преобразовал свой проект в приложение PWA с помощью указанной выше команды, и у меня есть все файлы, включая ngsw-config.json, в корне проекта. Я думаю, вы рассказываете о том, как преобразовать приложение Angular в приложение PWA, но мой вопрос совершенно другой. Я интегрирую Firebase и его службы в свое приложение, и я получаю сообщение об ошибке, а не для работника службы PWA. - person N Sharma; 14.06.2018
comment
@NSharma, вы запутались со своим другим вопросом в Firebase :) Пожалуйста, перепроверьте этот вопрос еще раз. В этом вопросе нет ни слова о Firebase, и ошибка — ngsw-config.json, для которой я дал приведенный выше ответ. Если вы уже исправили то же самое и если это соответствует ответу, отметьте его как правильный, чтобы это помогло другим. Я также провел некоторое время с этой ошибкой, поскольку Angular 5–6 изменил расположение этого файла. - person Anand; 14.06.2018
comment
Ах да, извините за ошибку, я вас неправильно понял. Большое спасибо :) . Я ценю это. - person N Sharma; 14.06.2018