我正在将workbox与workbox-webpack-plugin一起使用以缓存某些资产。 我当前的配置应该缓存两个文件:.js和.css。 这两个文件都已正确缓存,但是问题是浏览器仍然从网络上下载它们,我不知道为什么。
这是我的webpack配置中的工作箱插件,可生成服务工作者:
new GenerateSW({
swDest: 'service-worker.js',
importWorkboxFrom: 'local',
chunks: ['myChunk'],
skipWaiting: true,
clientsClaim: true,
ignoreUrlParametersMatching: [/.*/],
cacheId: 'myCacheId',
}),
以下是生成的服务工作者:
/**
* Welcome to your Workbox-powered service worker!
*
* You'll need to register this file in your web app and you should
* disable HTTP caching for this file too.
* See https://xxx
*
* The rest of the code is auto-generated. Please don't update this file
* directly; instead, make changes to your Workbox build configuration
* and re-run your build process.
* See https://xxx
*/
importScripts("workbox-v3.6.3/workbox-sw.js");
workbox.setConfig({modulePathPrefix: "workbox-v3.6.3"});
importScripts(
"precache-manifest.14645da973669ef1d2247d1863e806bd.js"
);
workbox.core.setCacheNameDetails({prefix: "myCacheId"});
workbox.skipWaiting();
workbox.clientsClaim();
/**
* The workboxSW.precacheAndRoute() method efficiently caches and responds to
* requests for URLs in the manifest.
* See https://xxx
*/
self.__precacheManifest = [].concat(self.__precacheManifest || []);
workbox.precaching.suppressWarnings();
workbox.precaching.precacheAndRoute(self.__precacheManifest, {
"ignoreUrlParametersMatching": [/.*/]
});
预缓存清单:
self.__precacheManifest = [
{
"revision": "9b22d66a17276ac21d45",
"url": "myChunk.js"
},
{
"revision": "9b22d66a17276ac21d45",
"url": "myChunk.css"
}
];
预缓存实际上有效,但是看起来fetch事件未被服务工作者截获。如果我尝试直接从Chrome浏览器的地址栏中下载文件,则该文件已从Service Worker正确加载。但是,当它从我页面的script
标签加载时,它仍然是从网络上下载的。
这是从脚本标记加载时的请求标头:
GET /assets/myChunk.js?1546600720154 HTTP/1.1
Host: localhost:5000
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Accept: */*
Referer: http://localhost:5000/xxx
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,fr-BE;q=0.8,fr;q=0.7,te-IN;q=0.6,te;q=0.5
Cookie: visitor_id=f86c312d-76e2-468d-a5c5-45c47fa3bbdc
任何帮助都会很棒!
答案 0 :(得分:0)
根据您发布的HTTP流量摘要,您的<script>
标签会导致请求/assets/myChunk.js?1546600720154
。尝试将请求与预缓存的网址进行匹配时,1546600720154
查询参数位导致不匹配。
我建议两件事之一
Configure webpack来添加内容哈希作为URL的一部分,并使用该哈希来支持基于时间的URL参数来进行缓存清除。 Workbox应该能够按原样读取这些哈希URL。
继续使用基于时间的URL查询参数进行缓存清除,但将Workbox配置为在确定是否与预缓存的URL匹配时忽略这些参数。您可以使用ignoreUrlParametersMatching
选项来实现。它需要一个RegExp
数组,并且类似ignoreUrlParametersMatching: [/^\d+$/]
这样的东西足以告诉Workbox忽略所有完全由数字组成的查询参数。
如果可以的话,我可能会选择选项1。