2017-12-27 45 views
1

私はアプリケーションのサービスワーカーを生成するためにgruntタスクランナーでworkbox buildを使用しています。私はサービスワーカーを作ってみましたが、うまくいきませんでした。以下のコードスニペットをご覧ください ワークショップビルドとgruntタスクランナーを統合するためのチュートリアルやコードスニペットはありますか?Workboxでgruntを使用してビルド

タスクの構成。

grunt.registerTask('generateSW', function() { 
     grunt.log.writeln("Generate SW",__dirname); 
     workboxBuild.injectManifest({ 
      swSrc: path.join(__dirname,'frontend','serviceWorker.js'), 
      swDest: path.join(__dirname,'frontend','serviceWorker.js'), 
      globDirectory: './build/public/', 
      globPatterns: ['**\/*.{html,js,css}'], 
      injectionPointRegexp: /(\.precacheAndRoute\()\s*\[\s*\]\s*(\))/, 
       staticFileGlobs: [ 
        './build/public/scripts/*.js', 
        './build/public/styles/{,*/}*.css', 
        './build/public/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', 
        './build/public/styles/fonts/*', 
        './build/public/styles/main.css', 
        './build/public/extensions/*.js', 
        './build/public/translations/*.json' 
       ], 
       runtimeCaching: [ 
       { 
        urlPattern: /\.cdn\.com/, 
        handler: 'cacheFirst', 
        options: { 
        cacheName: 'image-cache', 
        cacheExpiration: { 
         maxEntries: 50, 
        }, 
        }, 
       }, 
       { 
        urlPattern: /api/, 
        handler: 'cacheFirst', 
        options: { 
        cacheName: 'config-cache', 
        cacheExpiration: { 
         maxEntries: 10, 
        }, 
        }, 
       } 
       ] 
     }) 
    }) 

ServiceWorker.js

importScripts('workbox-sw.prod.v2.0.0.js'); 

const workboxSW = new WorkboxSW(); 
workboxSW.precache([]); 

workboxSW.router.registerRoute('https://fonts.googleapis.com/(.*)', 
    workboxSW.strategies.cacheFirst({ 
    cacheName: 'googleapis', 
    cacheExpiration: { 
     maxEntries: 20 
    }, 
    cacheableResponse: {statuses: [0, 200]} 
    }) 
); 

workboxSW.router.registerRoute('http://weloveiconfonts.com/(.*)', 
    workboxSW.strategies.cacheFirst({ 
    cacheName: 'iconfonts', 
    cacheExpiration: { 
     maxEntries: 20 
    }, 
    cacheableResponse: {statuses: [0, 200]} 
    }) 
); 

// We want no more than 50 images in the cache. We check using a cache first strategy 
workboxSW.router.registerRoute(/\.(?:png|gif|jpg)$/, 
    workboxSW.strategies.cacheFirst({ 
    cacheName: 'images-cache', 
    cacheExpiration: { 
     maxEntries: 50 
    } 
    }) 
); 

答えて

0

正確に何をして動作しませんでしたか?精確な注射?あなたのgruntタスクがWorkbox 3.0 APIを参照している間、Workbox 2.0を使用しているようです。 injectionPointRegexp - これはWorkbox 2.0ではサポートされていないと思います。 例として、https://developers.google.com/web/tools/workbox/reference-docs/latest/module-workbox-build#.injectManifestを参照できます。これによりPromiseが返され、then()catch()を使用してログを記録し、何が起こっているかを確認します。

関連する問題