2017-12-07 8 views
8

Ich habe ngsw-config.json (aus den docs):Angular 5 und Servicearbeiter: Wie man einen bestimmten Pfad ausschließt aus 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/**" 
     ] 
    } 
    }] 
} 

Auf meiner Seite gibt es einen Link zum RSS-Feed /api/rss , die in einem neuen Browser Tab öffnen sollte, ohne Angular App zu laden. Wie kann ich es aus einer Liste von Ressourcen ausschließen, deren Anforderung an index.html umgeleitet wird?

UPD: Ich habe versucht, aber nicht die folgende Konfiguration arbeiten (siehe !/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

Also, wenn ich mich nicht irre wollen Sie die Route nutzen '/ api/rss', die an einem anderen Ort verweist keine URL oder Seitenzugriff von Ihrem Winkel App und Servicemitarbeiter sollten nichts laden von dieser URL –

+0

@PannaDas, Angular-Anwendung sollte diese URL nicht dienen. – ktretyak

Antwort

4

Dank zu der Pedro Arantesadvice, erreichte ich die nächste funktionierende Konfiguration (siehe 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

Alles, was ich in Datagroups eintrage, scheint ignoriert zu werden. Ich habe die Datagroup in der Datei ngsw.json, die in dist generiert wurde (mit ng build --prod) nicht. Haben Sie es mit dieser Konfiguration oder funktioniert es anders? – switch

+0

Dies funktioniert nur, um Anfragen zu erhalten. Wir haben ein Problem, wenn eine Dateifortschrittsleiste wegen SW nicht funktioniert. Wir haben die Lösung, die hier vorgeschlagen wird: https://github.com/angular/angular/issues/21191#issuecomment-360051276 bis Angular wird eine native Unterstützung dafür hinzufügen – doron

0

Bitte lassen Sie mich wissen, ob das hilft:

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

Willkommen bei StackOverflow! Es ist großartig zu sehen, dass Sie etwas beitragen. In der Regel bitten wir Sie, ein wenig zu erläutern, warum Ihre Antwort die richtige Antwort ist. – Trent

4

Die ngsw-configuration.json Datei verwendet glob Format für Pattern-Matching-Pfade.

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. 

Was hier wichtig ist, ist der ! Präfix, das verwendet werden kann, einen Weg auszuschließen. Zum Beispiel sollte ein Glob-Muster von !/api/rss diesen Pfad ausschließen.

Um einen Pfad von Ihrer Datei nags-configuration.json auszuschließen, fügen Sie einfach das Zeichen ! diesem Pfadmuster voran.

+1

Dies ist die erste Sache, die ich versuchte ([wie folgt] (https://angular.io/guide/service-worker-configref#reference-configuration-file)), aber es funktioniert nicht. – ktretyak

+0

Haben Sie weitere Varianten wie '! Api/rss' oder'!/Api/rss/** 'ausprobiert? – Trent

4

Haben Sie bereits versucht, Datengruppen zu erstellen? dataGroups werden zur Datenanforderung wie assetGroups an Assets (Dateien) verwendet.

Datengruppen

Im Gegensatz zu Asset-Ressourcen, Datenanforderungen versioniert werden nicht zusammen mit der App. Sie werden entsprechend den manuell konfigurierten Richtlinien zwischengespeichert, die für Situationen wie API-Anforderungen und andere Datenabhängigkeiten nützlicher sind als .

Data Group Schnittstelle:

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

Sie können eine Datengruppe erstellen, die /api/rss ausgeschlossen (wenn "!/api/rss" nicht funktioniert, können Sie alle anderen APIs in urls": ["/api/user", "/api/admin"] hinzufügen:

{ 
    "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"; 
    } 
    }] 
} 
Verwandte Themen