2017-02-19 27 views
3

Я использую ServiceWorker, и в режиме dev работает отлично, моя проблема в том, что в режиме производства мое имя пакета генерируется с использованием хэша, например. 1234das3123ad5.bundle.js, поэтому сервисный работник не кэширует его. Мой ЮЗ код выглядит следующим образом:Подстановочные знаки в API ServiceWorker/Cache

self.addEventListener('install', function(event) { 
    // pre cache a load of stuff: 
    event.waitUntil(
    caches.open('mycache').then(function(cache) { 
     return cache.addAll([ 
     '/dist/bundle.js', 
     '/dist/app.css', 
     '/dist/index.html', 
     'https://cdnjs.cloudflare.com/ajax/libs/antd/2.7.2/antd.css' 
     ]); 
    }) 
) 
}); 

В документации о Cache API я не вижу ни одного примера о том, как я могу добиться этого.

Очевидно, что я мог кэшировать все в папке dist, имеющие что-то вроде:

self.addEventListener('install', function(event) { 
    // pre cache a load of stuff: 
    event.waitUntil(
    caches.open('mycache').then(function(cache) { 
     return cache.addAll([ 
     '/dist/', 
     ]); 
    }) 
) 
}); 

Но я не нашел его элегантный, хорошо в долгосрочной перспективе решение. Это способ иметь дикие карты в кеше? Что-то вроде '/dist/*.bundle.js'?

ответ

4

В сети нет концепции папок, в частности, нет способа, чтобы браузер знал все допустимые URL-адреса, начиная с префикса.

Остальная часть вашего сайта должна каким-то образом обрабатывать изменения URL-адресов для пересмотра активов, так почему бы не использовать одно и то же решение для вашего рабочего?

Вот что я сделал для моего блога - статический файловый менеджер Django добавляет правильные URL-адреса https://jakearchibald.com/sw.js

+0

ТНХ Джейк, я бы, вероятно, найти способ с WebPack генерировать правильные адреса на лету. –

+0

, так что вы говорите, что sw.js динамически генерируется/модифицируется на основе сгенерированных имен пакетов через webpack или какой-либо другой метод, например sed/awk? –

+1

Конечно, или вы можете загрузить имена с помощью 'fetch ('files.json'), затем (r => r.json())' –