Библиотека sw-precache используется для генерации
сервис-воркеров, которые кэшируют статические ресурсы и обеспечивают
оффлайн-доступ к веб-приложению. Одним из ключевых аспектов настройки
сервис-воркера является управление маршрутизацией запросов HTML-страниц,
особенно при использовании одностраничных приложений
(SPA), где все пути обычно обрабатываются одним
index.html.
Параметр navigateFallbackWhitelist
предназначен для точечной фильтрации URL-адресов, которые должны
использовать fallback-маршрут, определённый в параметре
navigateFallback. Это позволяет более гибко управлять тем,
какие запросы перенаправляются на основной HTML-файл, а какие остаются
«чистыми» и не перехватываются сервис-воркером.
navigateFallbackWhitelistВ простейшем случае сервис-воркер с navigateFallback
будет перенаправлять все навигационные запросы на один HTML-файл:
navigateFallback: '/index.html'
Это удобно для SPA, но приводит к проблемам, если:
В таких случаях используется
navigateFallbackWhitelist, который
принимает массив регулярных выражений (RegExp). Только URL,
соответствующие этим шаблонам, будут перенаправлены на
navigateFallback.
navigateFallbackWhitelist: [
new RegExp('^/app/'), // Все маршруты, начинающиеся с /app/
new RegExp('^/dashboard') // Все маршруты, начинающиеся с /dashboard
]
Принцип работы:
event.request.mode === 'navigate').navigateFallbackWhitelist.navigateFallback.swPrecache.write('service-worker.js', {
staticFileGlobs: [
'dist/**/*.js',
'dist/**/*.css',
'dist/**/*.html'
],
navigateFallback: '/index.html',
navigateFallbackWhitelist: [
/^\/app\//, // Только маршруты, начинающиеся с /app/
/^\/profile\// // и маршруты с /profile/
]
});
В этом примере:
/app/home и /profile/settings будут
перенаправлены на /index.html./api/data или /external/page останутся без
изменения, запрос будет выполнен напрямую.navigateFallbackWhitelist: [
/^\/(?!api\/)/, // Все маршруты, кроме начинающихся с /api/
]
Регулярное выражение с отрицательной проверкой (?!...)
предотвращает перехват запросов к API, сохраняя корректную работу
динамических данных.
navigateFallbackWhitelist работает только если
navigateFallback задан.navigateFallbackBlacklistВ sw-precache есть аналогичный параметр
navigateFallbackBlacklist, который
работает обратным образом:
navigateFallbackBlacklist исключает URL из обработки
fallback.navigateFallbackWhitelist разрешает fallback только для
URL, подходящих под шаблоны.Использование whitelist предпочтительнее, когда требуется строгий контроль над тем, какие маршруты SPA обрабатываются сервис-воркером, а какие нет.
fetch, но это уже выходит за
рамки стандартной настройки sw-precache.Таким образом, параметр
navigateFallbackWhitelist является
инструментом точечной фильтрации маршрутов при использовании
сервис-воркера, позволяя контролировать, какие URL перенаправляются на
основной HTML-файл, а какие обрабатываются обычным образом. Это
обеспечивает баланс между оффлайн-доступностью и корректной работой
динамических ресурсов.