2016-11-14 4 views
3

Ich versuche, sw-precache zu erhalten, externe CDN-Ressourcen vorab zu cachen, aber die generierte service-worker.js enthält nicht die CDN-URLs im Array precacheConfig.Zwischenspeichern externer Ressourcen mit sw-Precache

Dies ist, was ich in meinem gulpfile haben:

staticFileGlobs: [ 
    'http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css', 
    'client/assets/**/*.{js,html,css,png,jpg,gif,svg,eot,ttf,woff,ico}' 
] 

Die Dateien in meinem lokalen client/assets Ordner in den precacheConfig Array hinzugefügt werden, aber die externe font-awesome CSS nicht. Gibt es einen Weg, dies zu erreichen?

Antwort

8

sw-precache können nur lokale Assets, wie diejenigen, die mit dem client/assets/**/*... Muster, das Sie verwenden, übereinstimmen. Es ist nicht für die Verwendung mit Remote-Ressourcen gedacht, auf die über CDN zugegriffen wird.

Sie haben ein paar Ansätze:

  1. Verwenden npm (oder den Paket-Manager oder Ihre Wahl) eine lokale Kopie der Ressource zum Download (dh font-awesome) und implementieren Sie dann die Dritte Ressource neben Ihrem Erstanbieter-Vermögenswerte. Wenn der Code des Drittanbieters von einem Muster übernommen wird, das Sie an staticFileGlobs übergeben, kann es genau wie alles andere lokal gepalzt und versioniert werden.

  2. Verwenden Sie Laufzeit-Caching, um die Ressource auf dem CDN zu verarbeiten. Da die URL für Ihr spezifisches Asset eine 4.0.3 Versionierungszeichenfolge enthält, kann davon ausgegangen werden, dass sich die zugrunde liegenden Inhalte niemals ändern werden, und eine cacheFirst Strategie ist wahrscheinlich sicher.

    { 
        staticFileGlobs: [ 
        'client/assets/**/*.{js,html,css,png,jpg,gif,svg,eot,ttf,woff,ico}' 
        ], 
        runtimeCaching: [{ 
        urlPattern: /^https:\/\/netdna\.bootstrapcdn\.com\//, 
        handler: 'cacheFirst' 
        }], 
        // ...any other config options... 
    } 
    

    Diese Konfiguration breit genug ist, um abholen etwas serviert aus, dass CDN, Cache, und es dann Cache-first serve:

Sie können Ihre sw-precache Konfiguration wie folgt aussehen ändern einmal in nachfolgenden Besuchen.

Bitte beachten Sie, dass Ihr Beispiel ein http: Protokoll für Ihre CDN URL verwendet, und Sie werden https: verwenden müssen, um eine Antwort zu erhalten, die gut mit Service Arbeiter Caching spielt.

+0

Vielen Dank für Ihre Antwort. Ich habe bereits eine runtimeCaching URLPattern wie Sie vorgeschlagen, mein Problem aufgetreten, wenn ein Benutzer zum ersten Mal auf meine PWA zugreifen würde (Pre-Caching alles in staticFileGlobs) und dann beim zweiten Besuch offline zugegriffen. Der font-awesome wurde nie vom Service-Mitarbeiter heruntergeladen, da der Browser ihn nur dann heruntergeladen hat, wenn der Service-Mitarbeiter noch installiert hat (dh das runtimeCaching wurde noch nicht benutzt). – zeosamaster

+0

Ich hatte bereits überlegt, eine lokale Kopie zu verwenden, aber ich fragte mich, ob es einen Weg gab, es zu vermeiden. Ich werde diesen Ansatz verwenden, wie du es vorgeschlagen hast. Danke für Ihre Notiz, ich war mir dessen nicht bewusst :) – zeosamaster

+0

@zeodamaster hacken um das, indem Sie einen versteckten iframe laden, der Ihre Seite enthält, nachdem der Service-Arbeiter installiert – oligofren

Verwandte Themen