Glob-паттерны в контексте Workbox представляют собой строки, которые задают набор файлов для обработки сервис-воркером. Они позволяют гибко управлять тем, какие ресурсы кэшировать, а какие игнорировать.
* — соответствует любому количеству любых символов в
пределах одного уровня директории. Пример:
globDirectory: 'dist/',
globPatterns: ['*.js']
Это выберет все файлы с расширением .js в директории
dist/, но не затронет
поддиректории.
** — рекурсивное совпадение во всех поддиректориях.
Пример:
globPatterns: ['**/*.css']
Это позволит включить все CSS-файлы во всех поддиректориях.
? — соответствует одному любому
символу. Пример:
globPatterns: ['icon?.png']
Подойдет для файлов icon1.png, iconA.png,
но не icon10.png.
[abc] — соответствует любому символу из скобок.
Пример:
globPatterns: ['file[12].js']
Выберет file1.js и file2.js, но не
file3.js.
[a-z] — диапазон символов. Пример:
globPatterns: ['file[a-c].js']
Соответствует filea.js, fileb.js,
filec.js.
globIgnoresWorkbox позволяет не только включать файлы, но и исключать их через
опцию globIgnores. Синтаксис glob здесь аналогичен.
Пример исключения минифицированных файлов:
workboxBuild.generateSW({
globDirectory: 'dist/',
globPatterns: ['**/*.{js,css,html}'],
globIgnores: ['**/*.min.js', '**/*.map']
});
В этом случае все JS, CSS и HTML-файлы будут включены, кроме минифицированных JS и файлов карт.
Можно задавать несколько шаблонов одновременно:
globPatterns: ['**/*.js', '**/*.css', '!**/test-*.js']
Важно: при использовании отрицательных шаблонов (!) в
globPatterns Workbox трактует их как исключения, аналогично
globIgnores.
** охватывают все уровни вложенности.** применяются только к текущей
директории, указанной в globDirectory.**/* часто требуется для создания полного
кэша всех ресурсов.Workbox поддерживает также расширенные выражения:
{js,css} — выбор нескольких расширений в одном
паттерне:
globPatterns: ['**/*.{js,css}']{dir1,dir2} — выбор нескольких директорий:
globPatterns: ['{app,lib}/**/*.js']globIgnores или отрицательные паттерны.**
не захватывают поддиректории, что может приводить к неожиданным
пропускам.import {generateSW} from 'workbox-build';
generateSW({
globDirectory: 'dist/',
globPatterns: [
'**/*.{html,js,css,png,jpg,svg}',
'!**/admin/**',
'!**/*.map'
],
globIgnores: [
'**/draft-*.html'
],
swDest: 'dist/sw.js',
clientsClaim: true,
skipWaiting: true
});
В этом примере сервис-воркер будет кэшировать все основные ресурсы, исключая административные страницы, карты исходников и черновики, обеспечивая точное управление кэшем на уровне файловой структуры.