Sw-precache — это библиотека для генерации сервис-воркеров, которая
позволяет автоматически кэшировать статические ресурсы веб-приложения.
Среди множества параметров конфигурации особое место занимают
stripPrefix и stripPrefixMulti. Они отвечают
за корректное формирование относительных путей к ресурсам в кэше, что
особенно важно при деплое приложений на разные серверные окружения и в
ситуациях с вложенными директориями.
stripPrefixПараметр stripPrefix используется для удаления
фиксированного префикса из пути файлов при генерации списка ресурсов для
кэша. Это позволяет создавать относительные URL, соответствующие
структуре сайта, а не локальной файловой системе.
Синтаксис:
swPrecache.write('service-worker.js', {
staticFileGlobs: ['public/**/*.{js,html,css,png}'],
stripPrefix: 'public/'
});
Принцип работы:
public/js/app.js,
с учетом stripPrefix: 'public/' в кэше будет
зарегистрирован путь /js/app.js.Особенности:
public/ и
public — разные значения. Последний слеш часто важен для
корректного формирования путей.stripPrefixMultiПараметр stripPrefixMulti решает проблему необходимости
удаления нескольких префиксов одновременно. Он представляет собой
объект, где ключи — это префиксы файловой системы, а значения — строки,
которые будут использоваться вместо удаляемых префиксов. Таким образом
обеспечивается более гибкое управление URL в кэше.
Синтаксис:
swPrecache.write('service-worker.js', {
staticFileGlobs: [
'dist/js/**/*.js',
'dist/css/**/*.css',
'assets/images/**/*.{png,jpg}'
],
stripPrefixMulti: {
'dist/': '',
'assets/': 'static/'
}
});
Принцип работы:
dist/js/app.js попадет в кэш как
/js/app.js.assets/images/logo.png будет зарегистрирован в
кэше как /static/images/logo.png.Преимущества по сравнению с
stripPrefix:
Замечания по использованию:
stripPrefix и
stripPrefixMulti, приоритет отдается
stripPrefixMulti.stripPrefixMulti важна точная
запись пути, включая слеши.stripPrefixMulti, чтобы избежать конфликта префиксов и
ручного исправления путей после сборки.staticFileGlobs: Лучше
заранее продумывать шаблоны для staticFileGlobs, чтобы
исключить лишние файлы и корректно использовать
stripPrefixMulti.Сценарий 1: Одноуровневая папка сборки
swPrecache.write('service-worker.js', {
staticFileGlobs: ['build/**/*.{js,css,html}'],
stripPrefix: 'build/'
});
build/index.html,
build/js/main.js/index.html, /js/main.jsСценарий 2: Несколько исходных директорий
swPrecache.write('service-worker.js', {
staticFileGlobs: [
'dist/**/*.{js,css}',
'assets/**/*.{png,jpg,gif}'
],
stripPrefixMulti: {
'dist/': '',
'assets/': 'images/'
}
});
dist/js/app.js,
assets/icons/icon.png/js/app.js,
/images/icons/icon.pngЭти параметры обеспечивают гибкое управление путями ресурсов и позволяют легко адаптировать сервис-воркер к различным условиям деплоя, сохраняя оптимальную структуру URL для кэширования.