Я использую 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'
?
ТНХ Джейк, я бы, вероятно, найти способ с WebPack генерировать правильные адреса на лету. –
, так что вы говорите, что sw.js динамически генерируется/модифицируется на основе сгенерированных имен пакетов через webpack или какой-либо другой метод, например sed/awk? –
Конечно, или вы можете загрузить имена с помощью 'fetch ('files.json'), затем (r => r.json())' –