我正在使用Workbox 3.0 (webpack-plugin) 和Laravel Mix (5.6) 来自动生成一个 ServiceWorker 文件。
运行 webpack 编译器时,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({ plugins: [new GenerateSW()] });
- 运行
php artisan make:auth
并php artisan migrate
完成前端脚手架 - 编辑 \resources\assets\js 文件夹中的 bootstrap.js 以包含注册新 ServiceWorker 的常用代码
- 跑
npm run dev
编译后的 precache-manifest 文件如下所示:
self.__precacheManifest = [
{
"revision": "b922e094256b9404e705",
"url": "//js/app.js"
},
{
"revision": "b922e094256b9404e705",
"url": "//css/app.css"
}
];