Как указать текущий каталог в serviceworker.js - PullRequest
0 голосов
/ 09 января 2019

Мой сервисный работник установлен в промежуточный каталог

Главный сайт работает по адресу: https:example.com

Постановка включена: https:example.com/test/

Путь к рабочему сервису: https:example.com/test/serviceworker.js

Вот так я регистрирую сервисного работника:

navigator.serviceWorker.register('https:example.com/test/serviceworker.js', {scope: '/test/'})
.then(registration => {
  console.log(`Service Worker registered! Scope: ${registration.scope}`);
})

Работник службы отлично работает и установлен.

Меня беспокоит то, что внутри serviceworker.js я хочу использовать / для автоматического указания пути к текущему каталогу, что в данном случае: /staging/

Например, когда я хочу кэшировать домашнюю страницу на своем промежуточном сайте

/**
 * Cache the homepage.
 */
workbox.routing.registerRoute('/', workbox.strategies.staleWhileRevalidate();

Здесь его кеширование https:example.com не https:example.com/test/

Я знаю, что могу просто изменить registerRoute('/') на registerRoute('/staging/)'

Но это неэффективно, и из-за этого мне потребуется другая версия сервера сервисов для локального хоста, промежуточного размещения и развертывания. Я хочу знать, как правильно сделать это здесь, поэтому я могу установить область '/' для текущего каталога, в котором находится файл serviceworker.js. Спасибо.

Ответы [ 3 ]

0 голосов
/ 09 января 2019

в вашем случае

вам понадобится флаг, чтобы при регистрации сервисного работника было решено, будет ли это постановка или производство.


подготовка промежуточного пути к производственному домену не является оптимальной.

0 голосов
/ 09 января 2019

Хорошо, думаю, я понял, как это сделать правильно.

Как указать текущий каталог: просто './' Вместо '/'

/**
 * Cache the homepage.
 */
workbox.routing.registerRoute('./', workbox.strategies.staleWhileRevalidate();

Как кэшировать файлы и изображения по текущему пути: './image/' вместо '/ image /'

const urlsToCache = [
  './image/fallback.png',
  './offline/'
];

Теперь один и тот же файл работает одинаково локально и при постановке. Это ошибка новичка, мне нужно быть умнее :)

Edit: Я нашел это в Документации Google (Жизненный цикл Service Worker) :

Область регистрации сервисного работника по умолчанию: ./ относительно URL скрипта. Это означает, что если вы зарегистрируете //example.com/foo/bar.js имеет область действия по умолчанию //example.com/foo/.

0 голосов
/ 09 января 2019

Поместите работника службы в корневой каталог

...