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"
]
}