Проблема
Если я загружаю страницу без работника службы, все в порядке, но когда я представляю работника службы, страница не загружается в первый раз (когда он-лайн), потому чтов нем отсутствуют мои связанные файлы, что вызывает проблемы как CSS, так и скрипта.Если я обновляю страницу, то все работает, потому что работник службы кэширует запросы на выборку, когда они происходят.
Настройка
Скажем, у меня есть такой пакет, как
bundles.Add(new ScriptBundle("~/js/main").Include(
"~/Scripts/jquery-3.3.1.min.js",
"~/Scripts/moment.min.js",
"~/node_modules/sweetalert/dist/sweetalert.min.js"));
и работника службы в моем корневом каталоге, такого как
var cacheName = 'v1:static';
self.addEventListener('install', function (e) {
e.waitUntil(
caches.open(cacheName).then(function (cache) {
return cache.addAll([
'/images/keypad/number 0.png',
'/',
'/Menu/MainMenu',
'**TODO: Cache Bundles**'
]).then(function () {
self.skipWaiting();
});
})
);
});
self.addEventListener('fetch', function (event) {
if (event.request.method != "POST") {
event.respondWith(
caches.match(event.request).then(function (response) {
if (response) {
return response;
}
fetch(event.request).then(function (fetchResponse) {
caches.open(cacheName).then(function (cache) {
cache.put(event.request, fetchResponse.clone());
});
return fetchResponse;
});
})
);
}
});
Вопрос
Как кэшировать мои связанные файлы в моем работнике службы в обоихРежим отладки и выпуска, потому что отладка отображает их как отдельные файлы, в то время как Release объединяет их, а я не знаю URL-адреса пакетов?
Дополнительные мысли
Выне могу вставить Razor @ ... в этот файл, потому что это не cshtml.
Я не хочу перечислять каждый файл в обоих местах и поддерживать оба.
Я думал об использовании обработчика на стороне сервера для генерации моего файла service-worker.js, но мне было интересноесли есть действительно чистый способ сделать это, не сходя с ума.
Спасибо!