我使用Workbox3.0 (webpack-plugin)和Laravel (5.6)自动生成ServiceWorker文件。
运行webpack编译器时,工作框为预缓存资产生成的清单文件如下所示:
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 new <proj_name>cd <proj_name>npm installnpm install --save-dev workbox-webpack-pluginconst { GenerateSW }=需要量(‘工作箱-webpack-插件’); mix.webpackConfig({ plugins: new GenerateSW() });
php artisan make:auth和php artisan migrate来完成前端脚手架npm run dev编译后的precache清单文件如下所示:
self.__precacheManifest = [
{
"revision": "b922e094256b9404e705",
"url": "//js/app.js"
},
{
"revision": "b922e094256b9404e705",
"url": "//css/app.css"
}
];发布于 2018-06-11 09:41:46
我找到了解决办法:
由于Laravel正在使用"Laravel“API来配置和运行WebPack,配置WebPack的方法是修改文件webpack.mix.js。
杰夫·波斯尼克把我引向了正确的方向。如果我将以下行添加到webpack.mix.js中,编译器将生成一个正确的预缓存清单文件-
const { GenerateSW } = require('workbox-webpack-plugin');
mix.webpackConfig({
plugins: [new GenerateSW()],
output: {
publicPath: ''
}
});解决方案是为webpack的output.publicPath配置选项提供一个空字符串。
但是,如果需要为publicPath选项提供实际路径,则此解决方案将失败。参见这里的bug报告:https://github.com/GoogleChrome/workbox/issues/1534
https://stackoverflow.com/questions/50760754
复制相似问题