Я использую Workbox 3.0 (плагин webpack) и Laravel Mix (5.6) для автоматической генерации файла ServiceWorker.
При запуске компилятора веб-пакета файл манифеста, сгенерированный Workbox для предварительно кэшированных ресурсов, выглядит следующим образом:
self.__precacheManifest = [
{
"revision": "89c25ce71806a695a25e",
"url": "//js/app.js"
},
{
"revision": "89c25ce71806a695a25e",
"url": "//css/app.css"
}
];
Очевидно, что строки URL неверны и вызывают ошибки в реальной сетистр.
Вот мой webpack.mix.js : (соответствующие части)
const {InjectManifest} = require('workbox-webpack-plugin')
mix.webpackConfig({
plugins: [
new InjectManifest({
swSrc: './resources/assets/js/sw.js'
})
]
})
В то время как InjectManifest используется здесь для проповедикак и мое собственное динамическое кэширование, то же самое происходит при использовании плагина GenerateSW .
и моего источника sw.js :
workbox.precaching.precacheAndRoute(self.__precacheManifest || [])
Есть идеи, как это решить?Если я вручную изменю precacheManifest , он будет работать нормально:
self.__precacheManifest = [
{
"revision": "89c25ce71806a695a25e",
"url": "./js/app.js"
},
{
"revision": "89c25ce71806a695a25e",
"url": "./css/app.css"
}
];
Шаги, чтобы воспроизвести это:
- Создать новый LaravelПроект:
Laravel new <proj_name>
cd <proj_name>
npm install
npm install --save-dev workbox-webpack-plugin
- Добавьте эти строки в webpack.mix.js, чтобы настроить егодля Workbox:
const {GenerateSW} = require ('workbox-webpack-plugin');
mix.webpackConfig ({плагины: [new GenerateSW ()]});
запустите
php artisan make:auth
и
php artisan migrate
, чтобы завершить создание внешнего интерфейса Отредактируйте файл bootstrap.js в папке \ resources \ assets \ js, добавив обычный код для регистрации нового ServiceWorker run
npm run dev
Скомпилированный файл предварительного кэширования-манифеста выглядит следующим образом:
self.__precacheManifest = [
{
"revision": "b922e094256b9404e705",
"url": "//js/app.js"
},
{
"revision": "b922e094256b9404e705",
"url": "//css/app.css"
}
];