2017-12-07 103 views
8

mam ngsw-config.json (wzięte z docs):kątowa 5 i obsługa Pracownik: Jak wykluczyć szczególną ścieżkę od 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/**" 
     ] 
    } 
    }] 
} 

Na mojej stronie znajduje się link do kanału RSS /api/rss , który powinien się otworzyć w nowej karcie przeglądarki bez ładowania aplikacji Angular. Jak mogę wykluczyć go z listy zasobów, których żądanie zostało przekierowane na numer index.html?

UPD: Próbowałem, ale nie działa następujące config (patrz !/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/**" 
     ] 
    } 
    }] 
} 
+0

Więc jeśli się nie mylę chcesz użyć tej trasy '/ api/rss' który wskazuje na inny należy umieszczać żadnych adresów URL lub odsłon z kątowym aplikacji i pracownika służby nie powinny niczego załadowania z tego adresu URL: –

+0

@PannaDas, aplikacja Angular nie powinna wyświetlać tego adresu URL. – ktretyak

Odpowiedz

4

Dzięki do Pedro Arantesadvice, osiągnąłem kolejny działający config (patrz dataGroups a nd "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/**" 
     ] 
     } 
    } 
    ] 
} 
+0

Wszystko, co umieszczam w Datagroups, wydaje się ignorowane. Nie mam datagroup w pliku ngsw.json wygenerowanym w dist (z ng build --prod). Czy masz to z tą konfiguracją lub czy działa ona w inny sposób? – switch

+0

Działa to tylko dla żądań GET. Mamy problem, gdy pasek postępu pliku nie działa z powodu SW. Zrobiliśmy rozwiązanie, które jest zasugerowane tutaj: https://github.com/angular/angular/issues/21191#issuecomment-360051276, dopóki Angular nie doda natywnego wsparcia dla tego – doron

0

Proszę dać mi znać, jeśli to pomoże:

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

Witamy w StackOverflow! Wspaniale widzieć, że wnosisz wkład. Zazwyczaj prosimy o wyjaśnienie, dlaczego odpowiedź jest właściwą odpowiedzią. – Trent

4

ngsw-configuration.json plik używa formatu glob ścieżki dopasowywania wzorców.

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. 

Co jest tu ważne jest ! prefiks, który może być używany do wykluczenia ścieżki. Na przykład wzór globu z !/api/rss powinien wykluczyć tę ścieżkę.

Aby wykluczyć ścieżkę z pliku nags-configuration.json, po prostu dodaj znak ! do tego wzoru ścieżki.

+1

To jest pierwsza rzecz, którą próbowałem zrobić ([jak to] (https://angular.io/guide/service-worker-configref#reference-configuration-file)), ale to nie działa. – ktretyak

+0

Czy wypróbowałeś dodatkowe warianty, takie jak '! Api/rss' lub'!/Api/rss/** '? – Trent

4

Czy próbowałeś już tworzyć grupy danych? dataGroups są używane do żądania danych, takich jak assetGroups do zasobów (które są plikami).

danych Grupy

przeciwieństwie do zasobów majątkowych, żądania danych nie są wersjami wraz z aplikacją. Są buforowane zgodnie z ręcznie skonfigurowanymi zasadami, które są bardziej przydatne w sytuacjach takich, jak żądania API i inne zależności danych.

interfejs

Data Group:

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

Można utworzyć grupę danych, która wyklucza /api/rss (jeśli "!/api/rss" nie działa, można dodać wszystkich innych interfejsów API w 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"; 
    } 
    }] 
}