Как сделать сайт доступным в автономном режиме с помощью Laravel Mix Workbox
У меня есть Laravel Vue PWA с использованием Laravel Mix Workbox.
В webpack.mix.js у меня есть:
mix
.js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css')
.generateSW({
additionalManifestEntries: [{url: 'index.php', revision: '1'}]
})
Обратите внимание, что я добавил вручную index.php
как дополнительная запись в манифесте. Это потому, что HTML, содержащийся вindex.php
- это оболочка моего приложения, и ее необходимо кэшировать, чтобы мое приложение было доступно в автономном режиме.
В моем основном app.js
У меня есть:
import { Workbox } from 'workbox-window'
import { precacheAndRoute, createHandlerBoundToURL } from 'workbox-precaching'
import { registerRoute, NavigationRoute } from 'workbox-routing'
if ('serviceWorker' in navigator) {
const wb = new Workbox('/service-worker.js')
precacheAndRoute([
{ url: '/index.php', revision: '383676' }
])
const handler = createHandlerBoundToURL('/index.php')
const navigationRoute = new NavigationRoute(handler)
registerRoute(navigationRoute)
wb.register()
}
Я использую Workbox Window, поскольку он утверждает, что все упрощает.
Обратите внимание, я звоню precacheAndRoute
здесь, иначе я получаю ошибку createHandlerBoundToURL('/index.php') was called, but that URL is not precached.
Я не понимаю, зачем это нужно, так как вижу, что index.php
уже находится в массиве, переданном в precacheAndRoute
в моем server-worker.js
.
Я пробовал использовать окно Workbox messageSW
функция вместо передачи 'CACHE_URLS'
с участием index.php
но это не устранило ошибку.
Цель этого фрагмента кода - зарегистрировать маршрут навигации, чтобы я мог возвращать конкретный ответ на все запросы навигации в соответствии с документацией Google по запросам навигации.
Теперь я могу просматривать сайт в Chrome, видеть, что сервис-воркер установлен, но когда я выбираю "Offline" и перезагружаю страницу, я просто получаю сообщение "Нет интернета".
Посмотрев на сеть, я вижу запрос на /dashboard
не работает.
Как сделать так, чтобы мой сайт работал офлайн?
И почему сервис-воркер не использует кешированный index.php
ответить на запрос?