Библиотека sw-precache предоставляет возможность
автоматической генерации сервис-воркеров для кэширования статических
ресурсов веб-приложения. Основной механизм настройки реализован через
объект конфигурации, который позволяет гибко управлять списком
кэшируемых файлов, стратегиями обновления кэша и поведением
сервис-воркера.
staticFileGlobs Этот параметр
определяет массив шаблонов путей к статическим ресурсам, которые должны
быть включены в кэш при установке сервис-воркера. Шаблоны используют
синтаксис glob, что позволяет задавать маски, например:
staticFileGlobs: [
'public/**/*.html',
'public/css/**/*.css',
'public/js/**/*.js',
'public/images/**/*.{png,jpg,gif,svg}'
]
Здесь кэшируются все HTML-файлы, CSS и JS из указанных директорий, а также изображения с перечисленными расширениями.
stripPrefix Позволяет удалить префикс
пути при записи в кэш. Это важно, если структура директорий на сервере
отличается от корневой структуры приложения. Например:
stripPrefix: 'public/'
В результате в кэше файлы будут храниться относительно корня, без
префикса public/.
runtimeCaching Позволяет определять
стратегии кэширования для ресурсов, которые не включены в
staticFileGlobs, например, для API-запросов. Каждый объект
в массиве описывает правило сопоставления URL и стратегию
кэширования:
runtimeCaching: [{
urlPattern: /\/api\/.*$/,
handler: 'networkFirst'
}]
Доступные стратегии:
networkFirst — сначала пытается
загрузить ресурс из сети, при неудаче использует кэш;cacheFirst — сначала ищет ресурс в
кэше, при отсутствии делает сетевой запрос;fastest — параллельно обращается к
сети и кэшу, возвращает первый успешный ответ.navigateFallback Этот параметр
указывает файл, который будет возвращаться при запросе несуществующих
URL. Обычно используется для SPA, чтобы направлять все
незарегистрированные маршруты на index.html:
navigateFallback: '/index.html'
stripPrefixMulti Позволяет задавать
сразу несколько префиксов для удаления при добавлении файлов в кэш.
Работает как объект с ключами — префиксами, и значениями — строками, на
которые префиксы заменяются:
stripPrefixMulti: {
'public/': '',
'build/': ''
}
ignoreUrlParametersMatching Массив
регулярных выражений для игнорирования определённых GET-параметров при
сравнении URL ресурсов с кэшем. Например:
ignoreUrlParametersMatching: [/^utm_/, /^fbclid$/]
Все параметры, начинающиеся с utm_ или равные
fbclid, будут игнорироваться, что позволяет избежать
лишнего дублирования ресурсов в кэше.
verbose Флаг логирования процесса
генерации сервис-воркера. Значение true включает подробные
сообщения, полезные при отладке:
verbose: true
stripPrefixLength Альтернативный способ
убрать указанное количество символов с начала пути файла перед
добавлением в кэш:
stripPrefixLength: 7
Это удаляет первые 7 символов пути, полезно при унификации структуры URL внутри кэша.
handleFetch Флаг, который указывает,
будет ли сервис-воркер перехватывать сетевые запросы. Если
false, генератор создаёт сервис-воркер только для
предзагрузки ресурсов:
handleFetch: true
directoryIndex Задает имя файла,
который будет подставляться, если URL оканчивается слешем. По умолчанию
'index.html':
directoryIndex: 'home.html'
Все параметры конфигурации можно комбинировать для создания точной
стратегии кэширования. Например, можно одновременно кэшировать статику
из папки public, игнорировать аналитические GET-параметры и
использовать networkFirst для API-запросов:
swPrecache.write('service-worker.js', {
staticFileGlobs: ['public/**/*.{html,css,js,png,jpg,gif,svg}'],
stripPrefix: 'public/',
runtimeCaching: [
{ urlPattern: /\/api\/.*$/, handler: 'networkFirst' }
],
ignoreUrlParametersMatching: [/^utm_/, /^fbclid$/],
navigateFallback: '/index.html',
verbose: true
});
Этот подход обеспечивает полное покрытие всех типов ресурсов и гибкое управление поведением кэша при изменении контента и маршрутов.
sw-precache генерирует полностью рабочий сервис-воркер,
который автоматически управляет установкой, активацией и очисткой старых
кэшей.runtimeCaching и
navigateFallback позволяют поддерживать SPA и динамический
контент без потери оффлайн-доступа.stripPrefix упрощает управление
URL внутри кэша, особенно при деплое на разных серверах.Таким образом, объект конфигурации sw-precache является
центральным элементом, позволяющим гибко управлять кэшированием и
стратегиями работы сервис-воркера.