【发布时间】:2019-10-03 17:39:25
【问题描述】:
我需要从工作箱预缓存的 URL 中完全删除 __WB_REVISION__ 查询字符串。
我的项目在非常严格的规则下运行,后端将为每个请求创建唯一的缓存条目,并使用不同的查询字符串。当预缓存需要添加带有修订信息的查询字符串时,这会产生问题。
我已经尝试过使用更简单的 service-worker,但是由于我们使用带有拆分块的 webpack,我们偶然发现了很多 import() 和 window 对象问题,因此工作箱是可行的方法。
我已经尝试通过workbox.precaching.precacheAndRoute() 手动进行预缓存。任何建议将不胜感激。
工作箱配置(webpack.config.js):
new WorkboxPlugin.InjectManifest({
swSrc: "./assets/js/pwa/worker.js",
swDest: "sw.js",
precacheManifestFilename: "precache.[manifestHash].js",
excludeChunks: ["main", "page", "login"]
include: [
/(vendor).*\.js(?=\?|$|)/,
/\.(woff2)(?=\?|$|)/,
/(?=sprite)\.(svg)(?=\?|$|)/,
],
})
worker.js:
const cacheableResponse = {
statuses: [0, 200]
};
const offlinePage = "offline.html";
workbox.precaching.precacheAndRoute([offlinePage]);
workbox.routing.registerRoute(/\/$|(.html?)$/, new workbox.strategies.NetworkOnly());
workbox.routing.setCatchHandler(({ event }) => {
return caches.match(offlinePage);
});
workbox.precaching.precacheAndRoute(self.__precacheManifest);
编辑: 将下面的代码添加到 webpack 配置中似乎可以解决,但感觉有点 hacky
manifestTransforms: [
originalManifest => {
return (manifest = originalManifest.forEach(entry => delete entry.revision));
}
]
【问题讨论】:
标签: javascript typescript webpack service-worker workbox