I'm using Workbox 3.0 (webpack-plugin) and Laravel Mix (5.6) to auto-generate a ServiceWorker file.
When running the webpack compiler, the manifest file generated by Workbox for pre-cached assets looks like this:
self.__precacheManifest = [
{
"revision": "89c25ce71806a695a25e",
"url": "//js/app.js"
},
{
"revision": "89c25ce71806a695a25e",
"url": "//css/app.css"
}
];
Obviously, the URL strings are wrong and cause errors on the actual web page.
Here is my webpack.mix.js: (relevant parts)
const {InjectManifest} = require('workbox-webpack-plugin')
mix.webpackConfig({
plugins: [
new InjectManifest({
swSrc: './resources/assets/js/sw.js'
})
]
})
While InjectManifest is used here to have precaching as well as my own dynamic caching, the same happens when using the GenerateSW plugin instead.
and my source sw.js:
workbox.precaching.precacheAndRoute(self.__precacheManifest || [])
Any idea how to solve this? If I manually modify the precacheManifest, it works fine:
self.__precacheManifest = [
{
"revision": "89c25ce71806a695a25e",
"url": "./js/app.js"
},
{
"revision": "89c25ce71806a695a25e",
"url": "./css/app.css"
}
];
Steps to reproduce this:
- Create a new Laravel Project:
Laravel new <proj_name>
cd <proj_name>
npm install
npm install --save-dev workbox-webpack-plugin
- Add these lines to webpack.mix.js to configure it for Workbox:
const { GenerateSW } = require('workbox-webpack-plugin');
mix.webpackConfig({ plugins: [new GenerateSW()] });
- run
php artisan make:auth
andphp artisan migrate
to complete the frontend scaffolding - Edit bootstrap.js in the \resources\assets\js folder to include the usual code to register the new ServiceWorker
- run
npm run dev
The compiled precache-manifest file looks like this:
self.__precacheManifest = [
{
"revision": "b922e094256b9404e705",
"url": "//js/app.js"
},
{
"revision": "b922e094256b9404e705",
"url": "//css/app.css"
}
];
output.publicPath
value in your webpack config? – Jeff PosnickpublicPath
and the implicit URL that webpack creates for an asset. Can you provide a link to your full project that we could clone and try locally to reproduce? – Jeff Posnick