directoryIndex — это ключевой параметр конфигурации
библиотеки Sw-precache, используемый для определения,
какой файл должен обрабатываться как индекс директории при генерации
сервис-воркера. Его назначение заключается в том, чтобы корректно
разрешать URL-адреса, которые оканчиваются на слэш, на конкретный файл в
файловой системе, обычно index.html.
swPrecache.write('service-worker.js', {
staticFileGlobs: ['public/**.html', 'public/**.js', 'public/**.css'],
directoryIndex: 'index.html'
});
'index.html''index.html'.Когда браузер делает запрос к URL, который оканчивается на
/, сервис-воркер будет пытаться сопоставить этот URL с
конкретным файлом. Параметр directoryIndex определяет,
какой файл считать индексным в этой директории.
Например:
/about/directoryIndex: 'index.html'/about/index.html в
кеше.Если directoryIndex задан как пустая строка
'', Sw-precache не будет автоматически добавлять индексный
файл, и URL /about/ останется без преобразования.
directoryIndex напрямую влияет на формирование кеша для
статических файлов. При использовании шаблона
staticFileGlobs:
staticFileGlobs: [
'public/**/*.html',
'public/**/*.js',
'public/**/*.css'
]
и параметра:
directoryIndex: 'index.html'
Сервис-воркер автоматически создаёт кеш не только для конкретных файлов, но и для всех директорий с индексными файлами.
Совместимость с SPA (Single Page Application) В
SPA часто маршруты не соответствуют физической структуре директорий.
Например, /dashboard/ физически не существует, но должен
возвращать index.html. В таких случаях
directoryIndex помогает правильно обслуживать маршруты
через сервис-воркер.
Переопределение имени индексного файла В
проектах, где используется другой файл в качестве главного (например,
main.html), можно указать:
directoryIndex: 'main.html'
В результате запрос к / или /about/ будет
сопоставляться с main.html в соответствующей
директории.
Совмещение с stripPrefix и
replacePrefix Параметр directoryIndex
часто используется вместе с stripPrefix или
replacePrefix, чтобы корректно формировать пути к файлам в
кеше при разной структуре директорий:
stripPrefix: 'public/',
directoryIndex: 'index.html'
Это позволяет сохранить относительные пути в кеше без лишних директорий.
/.directoryIndex не заменяет серверную
маршрутизацию, а только влияет на кеширование статических файлов.'') подходит для
проектов, где все маршруты явно указаны, иначе страницы могут не
кэшироваться корректно.'index.html' —
стандартный вариант.'index.html' и сочетать с
navigateFallback для корректной работы всех маршрутов.var swPrecache = require('sw-precache');
swPrecache.write('service-worker.js', {
staticFileGlobs: [
'public/**/*.html',
'public/**/*.js',
'public/**/*.css',
'public/images/**/*.{png,jpg,gif,svg}'
],
stripPrefix: 'public/',
directoryIndex: 'index.html',
navigateFallback: '/index.html',
runtimeCaching: [{
urlPattern: /^https:\/\/api\.example\.com\//,
handler: 'networkFirst'
}]
});
В этом примере:
directoryIndex./ автоматически будут перенаправляться на
index.html.runtimeCaching.directoryIndex является простым, но критически важным
инструментом для корректного кэширования и обслуживания статических
файлов через сервис-воркер. Он обеспечивает совместимость с разными
типами сайтов и позволяет точно контролировать, какой файл будет
обслуживаться при обращении к URL-адресам с /.