Angular 5 и Service Worker: как исключить определенный путь из ngsw-config.json

У меня есть 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/**"
      ]
    }
  }]
}

На моем сайте есть ссылка на RSS-канал /api/rss, который должен открываться в новой вкладке браузера без загрузки приложения Angular. Как я могу исключить его из списка ресурсов, чей запрос перенаправляется в index.html?

UPD: я пытался, но не работал следующий конфиг (см. !/api/rss):

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

Ответ 1

Благодаря совету Pedro Arantes , я достиг следующей рабочей конфигурации (см. dataGroups и "maxAge": "0u"):

{
  "index": "/index.html",
  "dataGroups":
  [
    {
      "name": "api",
      "urls": ["/api"],
      "cacheConfig": {
        "maxSize": 0,
        "maxAge": "0u",
        "strategy": "freshness"
      }
    }
  ],
  "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/**"
        ]
      }
    }
  ]
}

Ответ 2

Вы уже пытались создать группы данных? dataGroups используются для запроса данных, такого как assetGroups для активов (которые являются файлами).

Группы данных

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

Интерфейс группы данных:

export interface DataGroup {
  name: string;
  urls: string[];
  version?: number;
  cacheConfig: {
    maxSize: number;
    maxAge: string;
    timeout?: string;
    strategy?: 'freshness' | 'performance';
  };
}

Вы можете создать группу данных, которая исключает /api/rss (если "!/api/rss" не работает, вы можете добавить все остальные API в urls": ["/api/user", "/api/admin"]:

{
  "index": "/index.html",
  "assetGroups": [{
    "name": "assetGroup1",
    ...
  }, {
    "name": "assetGroup1",
    ...
  }],
  "dataGroups": [{
    "name": "dataGroup1";
    "urls": ["!/api/rss"];
    cacheConfig: {
      maxSize: 50;
      maxAge: "3d12h";
    }
  }, {
    "name": "dataGroup2";
    "urls": ["/api/user"];
    cacheConfig: {
      maxSize: 40;
      maxAge: "3d12h";
    }
  }]
}

Ответ 3

В файле ngsw-configuration.json используется формат glob для путей сопоставления шаблонов.

Patterns use a limited glob format:

** matches 0 or more path segments.
* matches exactly one path segment or filename segment.
The ! prefix marks the pattern as being negative, meaning that only files that don't match the pattern will be included.

Здесь важно префикс !, который можно использовать для исключения пути. Например, шаблон glob !/api/rss должен исключать этот путь.

Чтобы исключить путь из вашего файла nags-configuration.json, просто добавьте символ ! к этому шаблону пути.

Ответ 4

В файле ngsw-config.json { "index": "/index.html", "dataGroups": [ { "name": "api", "urls": ["!/**/*profileimageupload*"], "cacheConfig": { "maxSize": 0, "maxAge": "0u", "strategy": "freshness" } } ]
}
{ "index": "/index.html", "dataGroups": [ { "name": "api", "urls": ["!/**/*profileimageupload*"], "cacheConfig": { "maxSize": 0, "maxAge": "0u", "strategy": "freshness" } } ]
}

например. Если ваш API похож на https://api.example.com/profileimageupload/, то добавьте последний сегмент из Сервиса /API

Я добавляю profileimageupload, который я хочу, чтобы исключить (удалить) вызов от сервисного работника, поэтому я добавил! /**/yourService/Api фамилия,

Ответ 5

Пожалуйста, дайте мне знать, если это поможет:

    { 
   "exclude": [ 
     "test.ts", 
     "**/*.spec.ts" 
   ] 
   }